■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build43
251 名前:デフォルトの名無しさん :2006/05/26(金) 01:23:31
>>250
んで、結局Sockにたどり着くんじゃなかった?

252 名前:デフォルトの名無しさん :2006/05/26(金) 02:04:38
わたしはTCHARやTEXTマクロをウィンドウズアプリケーションでしかつかったことはありませんでした。
ですので、windows.hがかってにtchar.hをインクルードしているものだとばかり思っていました。

それで先日久しぶりにコンソールのプログラムを作ろうと思いました。
そしたらTCHARやTEXTマクロはないといわれました。
_tcharや_Tマクロはありましたけど・・・

もしかしてTCHARやTEXTマクロはウィンドウズアプリケーション固有のものなのでしょうか?

253 名前:デフォルトの名無しさん :2006/05/26(金) 03:27:38
ところでCRTって何?

254 名前:デフォルトの名無しさん :2006/05/26(金) 03:39:10
>>253
マジレス: Cランタイムライブラリ
ネタレス: 栃木放送

好きなほうを選べ

255 名前:デフォルトの名無しさん :2006/05/26(金) 03:45:21
ttp://ruffnex.oc.to/kenji/text/dll_inj/

GetModuleHandle って、プログラムの仮想空間に配置されている
モジュールのベースアドレスを返すわけだよね?
これの例が毎回成功するってことはKernel32 って、
どのプログラムでも同じアドレスに配置されるの?

それとも根本的におれの考え方間違ってる?


256 名前:デフォルトの名無しさん :2006/05/26(金) 03:56:54
ネタレス: 陰極線管

257 名前:デフォルトの名無しさん :2006/05/26(金) 04:03:13
リストビューって一列目しか選択することは出来ないのでしょうか?
LVS_EDITLABELSのあるリストビューで二列目のデータを変えたりしたいのですが

258 名前:デフォルトの名無しさん :2006/05/26(金) 04:19:14
>>252
とりあえず
ttp://www.kab-studio.biz/Programing/Codian/MxA/09.html
で「LPTSTRとLPCTSTR」のところを読んだらいいと思う

259 名前:デフォルトの名無しさん :2006/05/26(金) 06:00:40
PlatformSDKってどこからダウンロードできるんでしょうか?
ググってみると
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/
ってリンクが色んなところから張られているんですが、
今この先には、Server 2003 SP1 Platform SDKしかないようです。
Download Centerで「core platform sdk」と検索しても
ヒットしないですし、公開終了してしまったのでしょうか・・・。

getaddrinfoを使おうと思ってWinsock2のヘッダをインクルードしても
見つからないよって言われてしまい、仕方なくMSDNに載っていた
関数の宣言をそのままコピペして使ってみたのですが、
危険な呼び出しだとか言われてしまい途方に暮れています。

公開終了してしまっているなら、
winsock2.hかws2tcpip.hにあるgetaddrinfoの宣言を
どなたかコピペしていただけませんか・・・?

260 名前:デフォルトの名無しさん :2006/05/26(金) 06:05:37
> Server 2003 SP1 Platform SDK
これのどこがPlatform SDKじゃないんだよ。

261 名前:デフォルトの名無しさん :2006/05/26(金) 06:24:31
>>260
ありがとうございます。

え、Win98とかに対応していないみたいだから違うのかと思ったんですが、
これでよかったんですか。
Serverとか思いっきり書いてあるので、なんか入れたらアプリが
NT系専用になってしまいそうで、不安で・・・。

getaddrinfoの宣言にWINAPIつけたら問題なく動くようになってしまったので、
とりあえずこのまま行こうと思います。
自己解決すみません。

262 名前:デフォルトの名無しさん :2006/05/26(金) 06:38:27
Win98とかに対応していないみたいだから違う

263 名前:デフォルトの名無しさん :2006/05/26(金) 07:08:58
>>261
Platform SDKに書かれているWindowsのバージョンは対応している一番新しいものを表す。
古いWindowsのプログラムを書くのには使えないということは決してない。
流石にWin16は無理だけど。

264 名前:デフォルトの名無しさん :2006/05/26(金) 07:31:30
古いVCを使ってると、PSDKの古いのが必要だが

265 名前:デフォルトの名無しさん :2006/05/26(金) 08:00:30
そのためにMSDNにこのAPIは○○以降でしかサポートされていませんとか
断り書きがあるわけだしな

266 名前:デフォルトの名無しさん :2006/05/26(金) 08:01:01
>>264
新しいのだと、
WTLやATLでコンパイルエラーが出たりするんだよね。

267 名前:デフォルトの名無しさん :2006/05/26(金) 09:27:55
>>259
MicrosoftR Windows Server 2003 R2 Platform SDK - March 2006 Edition
も出てるよ


268 名前:257 :2006/05/26(金) 13:14:10
リストビューで一列目以外は値を通常のやり方では変更できないということがわかりました。
ですので
リストビューのセルの上でクリックしたときにエディットコントロールを表示し
そこに入力した値をそのセルの値にしようと考えました。

それで下記のものが作りかけのソースです。

static HWND hList, hEdit;
LVHITTESTINFO HitTest;
case NM_CLICK:
GetCursorPos(&HitTest.pt);
ScreenToClient(hList, &HitTest.pt);
ListView_SubItemHitTest(hList, &HitTest);//押したセルを取得
lvColumn.mask = LVCF_WIDTH;
SendMessage(hList,LVM_GETCOLUMN,HitTest.iSubItem,(LPARAM)&lvColumn);//列の幅を得るため(高さはどうやって取得するの?)
lvItem.iSubItem = HitTest.iSubItem;
lvItem.iItem = HitTest.iItem;
lvItem.mask = LVIF_TEXT;
SendMessage(hList, LVM_GETITEM, 0, (LPARAM)&lvItem);//選択したセルの文字列取得
SetWindowText(hEdit, lvItem.pszText);//取得した文字列をhEditに格納←一列目はちゃんと文字列が表示されるのに二列目はなぜか文字化けする
MoveWindow(hEdit, わかんない, わかんない, lvColumn.cx, わかんない);//選択したセルの上にhEditを被せる
SetFocus(hEdit);//hEditにフォーカス移動←これをしたらなぜか文字列がかわらない
break;

見てもらったら最初に目に付くと思われるMoveWindowの「わかんない」ですが
これは選択したセルの左上の座標がわからないのと、セルの高さが取得の仕方がわからないということです。
だれかこのソースにこうしたらいいと思うと指摘してもらえないでしょうか?
根本的に間違っているところがあるならそれも指摘お願いします。

269 名前:デフォルトの名無しさん :2006/05/26(金) 13:20:02
>>255
exeのベースアドレスをkernel32.dllと同じにし、再配置情報を付けなかった場合、下記のエラーが発生する。
>app.exe - システム DLL の無効な再配置
>システム DLL kernel32.dll がメモリ内で再配置されました。アプリケーションは正常に動作しません。
>再配置が起きたのは、DLL app.exe が、Windows システム DLL のために予約されているアドレス範囲を
>使用していたためです。この DLL のベンダに連絡して、新しい DLL を入手してください。
しかし64bitプロセスと32bitプロセスでは、ベースアドレスや関数アドレスも違いそうだ

270 名前:デフォルトの名無しさん :2006/05/26(金) 13:23:12
>>268
LVM_GETSUBITEMRECT

271 名前:268 :2006/05/26(金) 14:39:18
>>270
いけました!
ありがとうございます。

272 名前:デフォルトの名無しさん :2006/05/26(金) 15:08:16
BUTTONコントロールのフォントサイズだけ変えたいと思っています。
そういうことをするには、
SendDlgItemMessageのWM_GETFONTでフォントを取得。
フォントサイズを変える。
SendDlgItemMessageのWM_SETFONTで新しいフォントを入力。
ということをしないといけないのでしょうか?


273 名前:デフォルトの名無しさん :2006/05/26(金) 15:13:05
いけないのです。

274 名前:デフォルトの名無しさん :2006/05/26(金) 15:22:01
めんどくさいですね。
もっといい方法があったら楽なのに・・・

275 名前:デフォルトの名無しさん :2006/05/26(金) 15:57:33
リソースファイルでボタン記述してる場合はフォントサイズ指定出来た様な


276 名前:デフォルトの名無しさん :2006/05/26(金) 17:01:11
>>269
どうもありがとう。
レスの内容で検索したらいい記事が見つかった。
http://japan.internet.com/developer/20050830/26.html#appendixes

277 名前:268 :2006/05/26(金) 18:09:14
もしかしてLVM_GETEDITCONTROLを使ったら、
自分でエディットコントロール用意する必要ない?

278 名前:277 :2006/05/26(金) 18:54:42
http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c1077/
これを見てそう思ったんだけどそんなことを言ってるのかな?
自分にはこのソースわかんないッス!!

279 名前:名前が欲しい名無しさん :2006/05/26(金) 21:11:53
こんばんわ。
winsock2のWSASocketにてWSA_FLAG_OVERLAPPEDを指定したいのですが、当方VB6につき自前で値を指定しなければなりません。
Googleで検索したのですが見つからず、とうとう根負けしてしまいました。
ご存知の方、もしくは調べるヒントなどお持ちの方がいらっしゃいましたら教えて頂けませんでしょうか?
何卒宜しくお願いします。

板違いでしたら申し訳有りません。

280 名前:デフォルトの名無しさん :2006/05/26(金) 21:20:20
#define WSA_FLAG_OVERLAPPED 0x01

調べ方としては、Platform SDKをインストールしてヘッダ見るのが確実かな。
あとは、Googleで"define WSA_FLAG_OVERLAPPED"みたいに
defineを付けて""で括って検索してみるとか。

281 名前:名前が欲しい名無しさん :2006/05/26(金) 21:25:53
早速の返信有難う御座います。
""で括る・・・でしたか;
""無しでは検索かけてみたのですが。。。
Platform SDKという物も早速見てみたいと思います。
有難う御座いました!

282 名前:デフォルトの名無しさん :2006/05/26(金) 22:25:04
VB6でオーバーラップソケットを扱うためにAPIを叩くというのはなかなか骨だろーなー

283 名前:デフォルトの名無しさん :2006/05/27(土) 07:06:02
ありがとうございました。これで何の迷いもなくNASMで書きまくれます。
後はTEBとPEBですね・・・Webには断片的な情報しかないみたいです。

284 名前:デフォルトの名無しさん :2006/05/27(土) 12:56:18
このウィンドウのサブクラス化ってさ
http://www.kumei.ne.jp/c_lang/sdk/sdk_36.htm
自作のウィンドウプロシージャを作って、元々のウィンドウプロシージャと入れ替えるって事? 
元々のウィンドウプロシージャに機能を追加する事はできないのですか?


285 名前:デフォルトの名無しさん :2006/05/27(土) 13:02:47
自作のほうで処理したくないことを元々のやつに押し付けることは可

286 名前:デフォルトの名無しさん :2006/05/27(土) 13:03:57
つーかそのページに書いてあるじゃないか

287 名前:デフォルトの名無しさん :2006/05/27(土) 13:11:18
いや、その元々のウィンドウプロシージャの定義はできないのかな?と思って。ダイアログボックスみたいに。

なんで、わざわざ別のウィンドウプロシージャを定義して入れ替えたりしてるんだろう、と思いまして、、

288 名前:デフォルトの名無しさん :2006/05/27(土) 13:20:52
>>287
元をどうにかすることができないから、サブクラス化で後付するんだ。

289 名前:デフォルトの名無しさん :2006/05/27(土) 13:28:36
DefaultWindowProc をただのおまじないだと思ってませんか?

290 名前:デフォルトの名無しさん :2006/05/27(土) 13:31:02
おぉ、、そういえば、、、そういう事だったのか、、、、すっきりしたよ

291 名前:デフォルトの名無しさん :2006/05/27(土) 19:36:36
リストビューにてLVM_GETITEMTEXTを使ってテキストを取得しようと思っています。

それで受け取るbufサイズを出来るだけで抑えたいのですが
調べた限りGetWindowTextLengthと同等の動きをするメッセージが見当たりません。
これはもしかして最大サイズのbufを用意するしかないのでしょうか?

292 名前:デフォルトの名無しさん :2006/05/27(土) 21:17:23
構造体にサイズがあったはず

293 名前:デフォルトの名無しさん :2006/05/27(土) 21:53:05
LVITEM.cchTextMax は渡すバッファのサイズだぞ?

294 名前:291 :2006/05/27(土) 22:24:55
ちょっと確認させてください。
LVM_GETITEMTEXTのマクロ、ListView_GetItemTextは
void ListView_GetItemText(
HWND hwnd, //リストビューのウィンドウハンドル
int iItem, //行
int iSubItem, //列
LPTSTR pszText, //バッファのアドレス
int cchTextMax //バッファのサイズ
);
ですよね。
つまりpszTextに指定するバッファを
自分で用意しなくてはいけない。
cchTextMaxの文字数も自分で指定しなくてはいけない。
ということではないのでしょうか?
ですので前もってバッファを用意するためには文字数を取得しなくてはいけないですよね?

どっかまちがってるのかな・・・

295 名前:デフォルトの名無しさん :2006/05/27(土) 22:34:01
>>294
pszTextが指すバッファをオーバーして書き込まないように最大文字数を指定してね、ということ。
入りきらない場合は切り詰められる。

文字数を取得する方法は無い(と思う)ので、十分な大きさのバッファを用意するか
全部取得できるまでバッファを拡張しつつループするようにする。
MFCやWTLでは後者の方法を採っている。

296 名前:291 :2006/05/27(土) 22:34:31
cchTextMaxに2を指定したら1文字+\0がpszTextに入りますよね?
ということは十分なバッファとサイズを指定しなくてはいけない!
そういうことだと思ったのですが・・・


297 名前:デフォルトの名無しさん :2006/05/27(土) 22:38:56
バッファが足りてなけりゃ切り捨て。ほとんどのWin32APIはそうなってるはず
その為のバッファ長なんだから。

298 名前:デフォルトの名無しさん :2006/05/27(土) 22:44:37
>全部取得できるまでバッファを拡張しつつループするようにする。
ということは下記のような同じ処理を何回もするということですよね?
1.GlobalAllocで領域確保

2.LVM_GETITEMTEXTで文字列取得

3.領域が足りなかったら領域を開放をして1に戻ってやり直し

4.取得した文字列をどっかに表示して領域の開放
という処理をするのですよね?

そういうことをしたら遅くなりませんかね?

つまりこういうことですか?
最初にこれぐらいあったら充分だろと思える領域を確保!
それから1をする・・・のかな?

299 名前:デフォルトの名無しさん :2006/05/27(土) 22:47:35
LVM_GETITEMTEXTの返り血が文字数返さなかったっけ?

300 名前:デフォルトの名無しさん :2006/05/27(土) 22:50:09
>>299
>it returns the number of characters in the pszText member of the LVITEM structure.
俺は英語苦手なんで合ってるか分からないが、あくまで取得できた文字数を返すと書かれてるように思える

301 名前:デフォルトの名無しさん :2006/05/27(土) 22:52:36
>>298
GlobalAllocを使う理由がわからんが、そういうこと。
文字列長によるが、バッファ長を2倍2倍していけばそんなに回数かからないと思う。


302 名前:デフォルトの名無しさん :2006/05/27(土) 22:53:12
OCX内の関数Aから、DLL内の関数Bを呼び出し、その関数BからDLL内の関数Cを呼び出すと、
OCXの登録ができなくなりますが、

それはなぜでしょうか?

OCX
void FuncA()
{
FuncB();
}

DLL
void FuncB()
{
FuncC();
}

DLL
void FuncC()
{

}

303 名前:デフォルトの名無しさん :2006/05/27(土) 23:06:19
>>301
WINAPIって領域を確保するのにmallocではなく、
GlobalAllocを使わないといけないのではないの?

それとC++ではないのでnewを使えないからというつもりだったのですが・・・
もしかしてまたなんか間違えたかなかな?

304 名前:デフォルトの名無しさん :2006/05/27(土) 23:19:26
>>303
今はGlobalAlloc/LocalAllocよりもHeapAllocのほうが推奨されている。
また、mallocやnewだって使いたければ好きに使ってよい。

305 名前:デフォルトの名無しさん :2006/05/27(土) 23:21:03
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/globalalloc.asp
>The global functions are slower than other memory management functions and do not provide as many features.
>Therefore, new applications should use the heap functions.
>However, the global functions are still used with DDE, the clipboard functions, and OLE data objects.


306 名前:デフォルトの名無しさん :2006/05/27(土) 23:30:26
それくらい日本語で読ませてやってもいいだろうに。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_globalalloc.htm
> 注意 グローバル関数は他のメモリ管理関数より低速で、提供する機能も多くありません。
> そのため、新しいアプリケーションは「heap functions」(ヒープ関数)を使うべきです。
> しかし、DDE 関数とクリップボード関数では、依然としてグローバル関数が使われています。

307 名前:デフォルトの名無しさん :2006/05/27(土) 23:44:53
日本語版のMSDN Libraryは余計な文章付け加えてたり
逆に重要なのを消しちゃったりするから困る

まぁその部分については問題ないが

308 名前:デフォルトの名無しさん :2006/05/27(土) 23:45:56
英語が多少読めるならこれくらいどうってことないだろうし
読めなないならこれを機会に英語を勉強してもらおうと思った。
日本語版MSDNは不完全で訳がイマイチだし。

309 名前:デフォルトの名無しさん :2006/05/27(土) 23:53:48
あぁ、そういうことか〜
>>305の文章読んだことありました!
翻訳サイトでちょっと読んだだけだったので
「依然としてグローバル関数・・・」のところを見て
まぁいいかぐらいにしか思ってませんでした。
DDE 関数とクリップボード関数ではだったのですか・・・

310 名前:デフォルトの名無しさん :2006/05/28(日) 02:19:00
すいません、くずたれな質問ですが教えてください。
ダイアログを表示さし、入力終えてOK押すとダイアログは消え
別に用意しておいたウィンドウにスイッチしてそのウィンドウに
結果を表示させたいのですが
まず、最初にウィンドウクラスでバックグラウンドをNULLで塗って
その登録したやつを、クリエイトウィンドウでつくってその真上に
ダイアログを表示させて......
この最初の時点でつまづいてます。
ふつうにウィンドウのメニューからダイアログを表示させる事は
できるのですが.....
オーナーウィンドウがクリエイトをメッセージした時
リソースからダイアログのハンドルを作って
ShowWindowして、描画したいオーナーウィンドウを
ダイアログがデストロイした時にオーナーをShowWindow
すれば良いのか、もうわかんなくなってしまって。
くずたれで、質問内容も中途半端なのは承知してます。
ただ、何かヒントを頂けないでしょうか。お願いします。

311 名前:デフォルトの名無しさん :2006/05/28(日) 02:42:46
>ウィンドウにスイッチして
>クリエイトをメッセージした

意味不明

312 名前:デフォルトの名無しさん :2006/05/28(日) 04:01:32
わらた

313 名前:デフォルトの名無しさん :2006/05/28(日) 09:57:24
>>310
@.OK押したら消えるダイアログを作成しる。
A.ウィンドウの上に、@を表示し動作を確認する。
B.ウィンドウの上に、@をA回連続で表示するように改造してみる。
作成途中に気付くと思うが。


314 名前:sage :2006/05/28(日) 13:02:36
くずたれって何だ

315 名前:デフォルトの名無しさん :2006/05/28(日) 13:21:07
お前にお似合いのスレのこと

316 名前:デフォルトの名無しさん :2006/05/28(日) 15:39:54
ttp://www.geocities.jp/i96815/windows/win11.html
にてHeapAllocの説明を読んだのですが、
GlobalAllocはHeapAlloc 系だと書いていました。

>>305の文章とこの文章ではなにかがおかしく感じるのですが
とくに「グローバル関数よりヒープ関数を使ったほうがいい」ってとこでが・・・

317 名前:デフォルトの名無しさん :2006/05/28(日) 15:57:16
>>313
わかりました
とにかく一個ずつの処理を追って確認していきます。
一気に作ろうと思った、俺の頭がどうかしてました。

318 名前:デフォルトの名無しさん :2006/05/28(日) 16:36:36
>>316
Win32/64ではGlobalAllocは内部でHeapAllocを呼び出すという実装になっている。
だから直接HeapAlloc呼べばいいだろということ。

319 名前:デフォルトの名無しさん :2006/05/28(日) 17:12:11
そういう意味だったのですか〜。
つまり無駄な処理はなくそうってことですね!


320 名前:デフォルトの名無しさん :2006/05/28(日) 17:18:14
普通のapiならスタックでもいいわけだし

321 名前:デフォルトの名無しさん :2006/05/28(日) 19:13:14
GetProcAddressって2番目の引数が
LPCTSTRじゃなくてLPCSTRなんだが
GetProcAddress(hDLL,_T(

322 名前:デフォルトの名無しさん :2006/05/28(日) 19:14:28
すまん、切れた。

GetProcAddressって2番目の引数が
LPCTSTRじゃなくてLPCSTRなんだが
GetProcAddress(hDLL,_T("HogeHoge"));
じゃなくて
GetProcAddress(hDLL,"HogeHoge");
で呼べってこと?


323 名前:デフォルトの名無しさん :2006/05/28(日) 19:39:32
英数字のみでいいからそうなんだろう。

324 名前:デフォルトの名無しさん :2006/05/28(日) 19:58:13
なのにWindows CEではLPCWSTRという罠

325 名前:322 :2006/05/28(日) 20:04:39
LPCWSTR版のGetProcAddressを呼ぶ方法はありませんか

326 名前:デフォルトの名無しさん :2006/05/28(日) 20:13:24
WinCEに乗り換える。

327 名前:デフォルトの名無しさん :2006/05/28(日) 20:20:49
>>325
W版自体が無いから、自分で文字コード変換する。

328 名前:322 :2006/05/28(日) 20:24:13
おk。
がんばる。


329 名前:デフォルトの名無しさん :2006/05/28(日) 22:17:23
「関数の引数すべてLPCTSTRに統一してくれたらいいのになんでしないのかな?」
とか考えてる自分は間違っているのでしょうか?

330 名前:デフォルトの名無しさん :2006/05/28(日) 22:27:19
むしろME以前など切り捨ててUNICODEだけにすればいい

331 名前:デフォルトの名無しさん :2006/05/28(日) 22:43:59
実行時ならまだしもコンパイル時に切り替えて対応じゃなぁ

結局9x系とNT系でバイナリ2つ用意しないといけないのが面倒

332 名前:デフォルトの名無しさん :2006/05/28(日) 22:51:31
9xとかMeなんてまだ使ってる方がおかしい

333 名前:デフォルトの名無しさん :2006/05/28(日) 22:53:45
>>332
俺の知り合いにもいるな
未だにMe使ってる奴

まぁそれでも俺は9x系はばっさり切り捨てるが
対応する必要もメリットも無いしな

334 名前:デフォルトの名無しさん :2006/05/28(日) 23:04:10
>>325の質問はつまり
非Unicodeの文字列をUnicode版のapiで読めませんかということだろ
非Unicodeの文字列なんだから非Unicode版のapiを使うのは当たり前じゃないか?

335 名前:デフォルトの名無しさん :2006/05/28(日) 23:22:45
ん?

普通に善意的に解釈すれば
MultiByteToWideChar

336 名前:デフォルトの名無しさん :2006/05/28(日) 23:25:11
というよりTCHARバージョン作ってくれたらそれでいいのにと思う

337 名前:デフォルトの名無しさん :2006/05/28(日) 23:28:46
作っても馬鹿以外は使わないだろうから

338 名前:デフォルトの名無しさん :2006/05/28(日) 23:32:05
>>336
>>336
>>336
>>336
>>336

339 名前:デフォルトの名無しさん :2006/05/28(日) 23:42:49
>>330-333
つMicrosoft Layer for Unicode
全く動かないというのは勘弁してくれ。

俺は今でも9xを使うこともあるんだ。(流石にメインPCはXPだけど)

340 名前:デフォルトの名無しさん :2006/05/28(日) 23:48:12
>>339
参考までに何に使ってるか教えて頂けないでしょうか?


341 名前:デフォルトの名無しさん :2006/05/28(日) 23:52:39
そりゃお前WinXPで動かない古めのエロ(ry

342 名前:デフォルトの名無しさん :2006/05/29(月) 01:09:54
>>339
俺も敢えて9xマシンを残しておく理由を聞きたい
古いソフトでもなければ大抵はXPで動くんだし
動かなくてもVMwareとかでどうにかできるんだし

343 名前:デフォルトの名無しさん :2006/05/29(月) 01:15:08
9xマシンさっさと対象から外してほしいよ!
試験をする身になって考えてみろよ!
98、Me、2000、XPをサービスパックごとに試験しろって鬼じゃん?
98すぐ変な動きするし!

344 名前:デフォルトの名無しさん :2006/05/29(月) 01:17:49 ?#
1.PC-9821使いだから
2.FM-TOWNS使いだから

345 名前:デフォルトの名無しさん :2006/05/29(月) 01:36:13
早く棄てれ

346 名前:デフォルトの名無しさん :2006/05/29(月) 02:29:22
ttp://nienie.com/~masapico/api_InternetReadFile.html
のサンプルソースをborlandC++にてコンパイルしたら
Error: 外部シンボル 'InternetOpenA' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
Error: 外部シンボル 'InternetOpenUrlA' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
Error: 外部シンボル 'InternetReadFile' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
Error: 外部シンボル 'InternetCloseHandle' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
となりました。
これはなにをしたら動くのでしょうか?

wininet.hはインクルードしています。

347 名前:デフォルトの名無しさん :2006/05/29(月) 02:58:30
>>346
Wininet.libをリンクすれば動くんじゃないかな

348 名前:デフォルトの名無しさん :2006/05/29(月) 03:25:49
>>343
貧乏ですみません。
使い続けてすみません。
生(ry

349 名前:デフォルトの名無しさん :2006/05/29(月) 04:59:30
僕は2000、NTを切り捨てている。98、Me、XPのみ。

350 名前:デフォルトの名無しさん :2006/05/29(月) 06:02:57
>>344
1. PC-9821用Windows 2000もある(XPはないが)
2. TOWNS版Windows 98なんてあったっけ?

351 名前:デフォルトの名無しさん :2006/05/29(月) 06:52:11
>>340>>342
Windows 98
使っている理由はそのPCの性能が低すぎるから。
あと、結構最近までそれが家のメインPCだったこともあって、
俺は9xで動かないソフトを作るという気にならない。(9xで動作する保障があるかどうかは別問題)

そのPCへ試しにWindows 2000とVS .NET 2003を入れてみたが、
何か操作しようとする度にHDDはガリガリ言うし、
Boost.Lambdaを使ったプログラムをビルドすればいつまで経っても終わらない。
けど不要なサービスを止めたりすれば、メモリ64MBでもWin 2kが意外と使い物になったのは驚きだった。

352 名前:デフォルトの名無しさん :2006/05/29(月) 09:07:14
Win9x/MEを切り捨てたとしても、Unicodeを使うメリットってなんかあるのか?
_MAX_PATHを超えるパスが使えるぐらいしか、思いつかないんだが・・・・・


353 名前:デフォルトの名無しさん :2006/05/29(月) 09:35:59
>>352
NTカーネルのネイティブはすべてうにこーど。
ANSI版のAPIは、たんに文字コードを変換しているだけのラッパ。

354 名前:デフォルトの名無しさん :2006/05/29(月) 10:28:20 ?#
>>350
1.使ってるデバイスによってはWin2k用のドライバがないので9xを使わざるを得ない場合がある。
2.Windows95ならある。

355 名前:デフォルトの名無しさん :2006/05/29(月) 10:32:45
>>352
Shift JISに無いUnicodeの文字をファイル名に使われても読み書きできる。
まぁトラブるのは、ハートマークみたいな記号系ぐらいだと思うけどさ。


356 名前:デフォルトの名無しさん :2006/05/29(月) 14:16:13
質問があります。
ログイン画面やCTRL+ALT+DELで出る画面をキャプチャしたいのですが。

・アプリケーションをサービス化(SERVICE_WIN32_OWN_PROCESSとSERVICE_INTERACTIVE_PROCESS権限)
・OpenWindowStationとOpenDesktopにてWinlogonのデスクトップハンドルを取得
・EnumDesktopWindowsにてウインドウの列挙
・列挙したウインドウのからGetDCにてHDCの取得

までは出来たのですがGetPixelでピクセルの取得ができません。
GetDeviceCapsでGetPixelは使用可能のように見えるのですが・・・。

気になる事はSetThreadDesktopとSwitchDesktopを使用するとBUSYでエラーになります。

何か必要な処理が他にあるのでしょうか?

宜しくお願いします。

357 名前:デフォルトの名無しさん :2006/05/29(月) 14:40:12
>>356
まずは、BitBlt関数でやるべきだと思うが。

358 名前:デフォルトの名無しさん :2006/05/29(月) 15:34:37
2000とXPでFindFileの列挙する順番が違うことに気がついた…。
XPだと名前順にソートしやがるorz

勝手にソートさせないことってできますか?(要はそのフォルダへの
転送順や生成順に取ってきたいのです)

似たような問題にぶつかった人いませんでしょうか?
気のせいだろうか…

359 名前:デフォルトの名無しさん :2006/05/29(月) 15:40:03
元々ファイルシステムが返す順だろ?

360 名前:デフォルトの名無しさん :2006/05/29(月) 15:41:52
>>358
その要求そもそも無茶。

361 名前:デフォルトの名無しさん :2006/05/29(月) 15:50:07
>>359
XP(NTFS5.1?)だとファイルシステムレベルで名前順にソートされてる…?

変なことしてるのは承知なんだけどね。

362 名前:デフォルトの名無しさん :2006/05/29(月) 15:51:07
自分でソート

363 名前:デフォルトの名無しさん :2006/05/29(月) 15:58:15
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/findnextfile.asp
>The order in which this function returns the file names is dependent on the file system type.
>With the NTFS file system and CDFS file systems, the names are returned in alphabetical order.
>With FAT file systems, the names are returned in the order the files were written to the disk, which may or may not be in alphabetical order.

364 名前:356 :2006/05/29(月) 16:04:16
>>357
もちろんBitbltも試しましたがダメでした。
通常のdefaultのデスクトップウインドウでは動きました。

365 名前:デフォルトの名無しさん :2006/05/29(月) 16:04:35
どうも勘違いしてたくさいです。
NTFSとFATの差のようだ…。
>>363
どうもでした。

366 名前:デフォルトの名無しさん :2006/05/29(月) 16:21:14
>>356 >>364
サービスのプロパティで
「デスクトップとの対話を許可」
のチェックとか

367 名前:デフォルトの名無しさん :2006/05/29(月) 16:25:40
ゲームを作ろうと思って、fpsを制御しようと思ったら、タイマは95とNT系では精度に差があるとききました。
何か巧い方法はないですか。

あと、検索してて思ったんですが、esy link libraryってどうですか?
VS2005でうまく動きますか?

368 名前:デフォルトの名無しさん :2006/05/29(月) 16:51:30
>>367

このサイトまだあった。よかった。

ttp://www.emit.jp/prog/prog_t1.html


369 名前:デフォルトの名無しさん :2006/05/29(月) 16:51:46
> あと、検索してて思ったんですが、esy link libraryってどうですか?
それを検索できません

370 名前:デフォルトの名無しさん :2006/05/29(月) 16:54:59
easy link library ではないかと脳内補間


371 名前:356 :2006/05/29(月) 16:55:33
>>366
「デスクトップとの対話を許可」=「SERVICE_INTERACTIVE_PROCESS」
だと思われます。

あと上でGetDCが成功してると書きましたがひょっとすると無効な値かもしれません。
GetLastErrorでは特に何も返ってきてないのですが。。。
ウインドウハンドルはGetWindowTextで「SAS window」などを取得できてますので大丈夫だと思われます



372 名前:デフォルトの名無しさん :2006/05/29(月) 17:01:19
ソスどっかにうpしてくれんかのう

373 名前:367 :2006/05/29(月) 17:09:21
をー、easy link libraryです。すみません。

374 名前:356 :2006/05/29(月) 17:57:14
>>372
ttp://chise.s25.xrea.com/cgi-bin/up/source3/No_1883.txt

簡易的なソースをアップしました。

375 名前:デフォルトの名無しさん :2006/05/29(月) 18:04:38
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html
第49回 Windowsで、精度の良いタイマを得る方法について(elユーザー必見!?)

僕も最近見つけた情報なんだけど、超大昔とはいえ氏がelユーザーだったというのも驚き。
ドットネットってdirectx8のSDK使える?それならelも使えると思うんだけど。

376 名前:デフォルトの名無しさん :2006/05/29(月) 18:13:34
>>375
timeGetTime使った方法ってCPU馬鹿食いせんの?
あと、タイマーの精度上げるイヤーな関数使わないと
精度上がらなかったんじゃあ…。

377 名前:デフォルトの名無しさん :2006/05/29(月) 18:52:09
タイマと言えばここも忘れずに。
http://www.emit.jp/prog/prog_t1.html

378 名前:デフォルトの名無しさん :2006/05/29(月) 19:19:49
猫でもや、wisdom以外のサイトで、ソースを参考できる
サイトってありませんか?
APIに関する事柄を参考にしたいのではなく、どういう風に
他の人は作っていってるのかを参考にしたいです。
一つの処理に対して一つの関数を作るにしても、その関数の
名前付けとか戻り値をどうしてるとか、ある変数を
グローバル変数(関数それぞれで使いたいからそうするのは
わかりますが)にしとくか、staticにしとくか、うまくグローバルや
staticを使わず処理してるとか、人それぞれだと思うのです。
そういう意味で、勉強のために人のソースを見てみたいんです。
海外、国内とわずそういう、ソースを公開してるページを
知ってる方教えてください。
猫でもの本を買って一通り例題等を打ちながらASCIIからでてる
リファレンス本見て、APIに関する内容を理解しつつ勉強してた
のですが、いざ自分で作ろうとすると、どうしても参考にしてきた
ソースが猫でもの本なので、そのクセみたいなのがついていて
他の人はどんな風にソースを書いているのかが気になってしまう
ようになってしまいました。
そういう風な意味で色々なサイトを教えてほしいです。

379 名前:デフォルトの名無しさん :2006/05/29(月) 19:22:47
MFCのソースが一番参考になる。

380 名前:デフォルトの名無しさん :2006/05/29(月) 19:23:42
MSDNのサンプル

381 名前:デフォルトの名無しさん :2006/05/29(月) 19:25:02
MFCのソースが一番参考になる。うっきー

382 名前:デフォルトの名無しさん :2006/05/29(月) 19:27:39
そろそろタイマーの話は止めたいマー。

383 名前:デフォルトの名無しさん :2006/05/29(月) 19:35:22
http://www.microsoft.com/japan/windows/embedded/ce/tools/source/default.asp
これまだ落とせるか?

384 名前:デフォルトの名無しさん :2006/05/29(月) 20:11:54
>>374
豚楠

385 名前:367 :2006/05/29(月) 20:16:45
SetTimerで、既に使用中のタイマ識別しを指定するとどうなるの?


あと、フレームを処理させるのに
1.識別子を自前で用意して、呼び出し元の関数を識別子に記録、タイマセット
2.待ち時間が過ぎて、WM_TIMERを捕まえる
3.識別子から呼び出し元の関数にgotoジャンプ、(1へ飛ぶ)

っていう、我ながらベタな方法を使ってるのですが、普通フレーム処理させるのにどうしますか?

386 名前:デフォルトの名無しさん :2006/05/29(月) 20:18:07
>>378
猫は悪い見本だから反面教師にするといいよ


387 名前:デフォルトの名無しさん :2006/05/29(月) 20:19:49
>>385
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/timers/timerreference/timerfunctions/settimer.asp

388 名前:367 :2006/05/29(月) 20:33:06
SetTimerのlpfnTimerに自分自身の関数を指定すれば馬と思ったんですが、
これって戻り値を返さない無限再帰とかにならないんですか?

389 名前:デフォルトの名無しさん :2006/05/29(月) 20:34:20
今日はもう店仕舞いだから、バカは帰っとくれ!

390 名前:デフォルトの名無しさん :2006/05/29(月) 20:40:04
>>388
385 のリンク先にある MS のドキュメントを見るとまるでワンショットタイマとして動作するように
思えるかもしれないけれども、Windows の SetTimer で設定されるタイマはインターバルタイマなので、
毎回 SetTimer する必要はありません。

それから、フレームを処理させるのに SetTimer のタイマを使うのは全くお勧めできません。
(が、試してみるのも悪くはないでしょう)

391 名前:デフォルトの名無しさん :2006/05/29(月) 20:41:21
いいえ

392 名前:デフォルトの名無しさん :2006/05/29(月) 20:54:59
こんばんは
質問いたします。
ビットマップをウィドウに表示させるのは、できるのですが、
そのファイルの情報を,取得して,自分で、ウィンドウに書いていくことは、
できるのでしょうか。
よろしくお願いいたします。


393 名前:デフォルトの名無しさん :2006/05/29(月) 21:04:25
>>392
情報というのが何なのかわかりませんが、
恐らくできます。

394 名前:デフォルトの名無しさん :2006/05/29(月) 21:04:49
できる

395 名前:デフォルトの名無しさん :2006/05/29(月) 21:07:30
デジカメでパシャリと

396 名前:346 :2006/05/29(月) 22:29:25
>347
ありがとうございます!
本当にそれだけでした!

397 名前:デフォルトの名無しさん :2006/05/29(月) 23:19:49
>>392です
>>393-395さんありがとうございます。
できるのですね、探してみます。

398 名前:デフォルトの名無しさん :2006/05/30(火) 00:21:01
できるとしかいいようがないな。
>探してみます。
無理だと思うなあ。

399 名前:デフォルトの名無しさん :2006/05/30(火) 06:15:53
InputBoxを表示するAPIって無いのですか?

400 名前:デフォルトの名無しさん :2006/05/30(火) 06:45:05
それっぽいダイアログを作って表示させるしかない

401 名前:デフォルトの名無しさん :2006/05/30(火) 07:51:54
>>400
ありがとうございます。
仕方ないので頑張ってCreateWindow使ってゴリゴリやります。

402 名前:デフォルトの名無しさん :2006/05/30(火) 10:21:54
すいません教えてください。
ダイアログのコントロールから受けたデータをウィンドウの方に反映さしたいんですが
グローバル変数を使わずにやりとり出来ないのでしょうか
もしかしてウィンドウプロシージャの中にダイアログプロシージャ放り込んだりするんで
しょうか。
関数の中での数値を静的にして処理するのは仕方がないと思うのですが
成るだけグローバル変数は使いたくないです。
良い方法があれば教えてください。

403 名前:デフォルトの名無しさん :2006/05/30(火) 10:27:51
>>402
とりあえず、どういう状況なのか読み取れないけど、
メッセージ投げたらイインジャネ?

404 名前:デフォルトの名無しさん :2006/05/30(火) 11:14:59
釣りのようにも見えるな。

405 名前:デフォルトの名無しさん :2006/05/30(火) 11:23:13
>>402
GWL_USERDATAに、構造体でも仕込んでおいて、そこを更新するという手もある。
けど>>403のいうように、自分で新しいメッセージを定義してwParamとかlParamとかで受け渡した方がいい。

406 名前:デフォルトの名無しさん :2006/05/30(火) 11:57:25
ダイアログに複数のコントロールを配置して、
OKを押したら各コントロールの状態を取得する。
これが猫だと全部グローバルでやってるから。

407 名前:デフォルトの名無しさん :2006/05/30(火) 12:04:45
Cならそんなもの

408 名前:デフォルトの名無しさん :2006/05/30(火) 15:19:28
>>367
DXライブラリはどうよ?

409 名前:デフォルトの名無しさん :2006/05/30(火) 16:19:54
スレッドごとにコンソールを割り当てることは可能ですか?

410 名前:デフォルトの名無しさん :2006/05/30(火) 16:33:55
>>409
無理。
1プロセスで1つまでしか使えない。

411 名前:デフォルトの名無しさん :2006/05/30(火) 16:39:12
何とかして割り当てられないか調べていたのですが、やはり無理でしたか。
ありがとうございました。

412 名前:デフォルトの名無しさん :2006/05/30(火) 17:43:26
激しくすれ違いですみません。
VC#で、WordObjectLibraryを参照設定せずとも、
wordをハンドリングするために、
CreatObjectを使用したいと考えているのですが、
VC#とCreatObjectの組み合わせは、取り扱いが厄介らしいです。
どうしたらいいのでしょうか。

さっきからぐぐってるのに、全然わかりません。

413 名前:デフォルトの名無しさん :2006/05/30(火) 17:51:01
スレ違いと自覚してるなら妥当なスレに行け

414 名前:412 :2006/05/30(火) 17:53:33
>413
どこに?
C#の掲示板がVBAわかるわけないし、
VBAの掲示板がC#わかるわけないし、
VBAとC#両方扱っているすれないし、
結局、ここしかないのです。

415 名前:412 :2006/05/30(火) 17:56:02
http://www2.moug.net/bbs/wordvba/20060526000002.htm

「COMExceptionはハンドルされませんでした。」
というエラーがどうしても解決できないのです。

416 名前:デフォルトの名無しさん :2006/05/30(火) 17:58:05
>>414-415
死んだ方がいいよ

417 名前:412 :2006/05/30(火) 18:06:11
>416
おまえもな

418 名前:デフォルトの名無しさん :2006/05/30(火) 18:08:06
>>415
ここで詳しく説明されてるじゃん。
http://dobon.net/vb/dotnet/vb2cs/createobject.html

あと C# スレがどっかにあるから、そっちに粋なヨ。
今のところ API とは何の関係もないから。
CreateObject なんて API も無いしね。

419 名前:412 :2006/05/30(火) 18:08:11
417は偽者です。やめてください。

420 名前:デフォルトの名無しさん :2006/05/30(火) 18:15:19
>>419
むしろ、このスレ的にはCoCreateInstance関数であって、
CreateObjectはスレ違い。

C#系板で、GetTypeFromProgIDがうまくいかねーって聞いたほうがいいかも。

421 名前:デフォルトの名無しさん :2006/05/30(火) 18:19:23
うまくいかんのじゃなくて面倒だそうだからいいのない?って質問だな

422 名前:412 :2006/05/30(火) 18:20:02
>418
そこはもう知ってました。
invokeって、強烈にめんどくさい。

COMExceptionエラーがむかつく。
http://support.microsoft.com/default.aspx?scid=kb;ja;316384

423 名前:デフォルトの名無しさん :2006/05/30(火) 18:20:28
C#系板か。
C#はそんなに偉大な存在だったのか。

424 名前:412 :2006/05/30(火) 18:21:40
>421
そうです。
そもそも
どうしてWord.Find find=myDoc.Selection.Find
作って、find.Executeをすると、
COMExceptionなんて出てくるのだ!!
ワードのバージョンを2000から2003に
うpしただけじゃないか!!九層

425 名前:デフォルトの名無しさん :2006/05/30(火) 18:30:23
リア厨はさっさと所定のスレへ消えてください。

426 名前:412 :2006/05/30(火) 18:37:03
>425
所定のすれがどこなのか、探してみつかってたなら
いまここにいないっつーの

427 名前:デフォルトの名無しさん :2006/05/30(火) 18:50:11 ?#
>>426
見つかるまで探せ。

428 名前:デフォルトの名無しさん :2006/05/30(火) 18:51:30
>412
UZEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

429 名前:デフォルトの名無しさん :2006/05/30(火) 18:54:48
>>426
だからココも違うんだって場。
あと、ここでそんな態度とっちゃうとC#スレに言っても誰も教えてくれないから、
どっか他所で聞いたほうが良いと思います。
C#スレもAPIスレも、答える側の人はだいたい同じですから。

ここのフォーラムとかどうでしょう?
http://www.gotdotnet.com/japan/

430 名前:402 :2006/05/31(水) 11:50:22
すいません、根本的な質問さしてください
みなさんはC言語で書いてるんですか?それともC++で書いてるんでしょうか
C++で書いていった方が先々の事を考えると良いならそうしたいです。

あと>>403さんメッセージを投げるや、>>403さんのGWL_USERDATA
に構造体を仕込むというのも、自分のレベルだとまだ、規定の関数が
投げるメッセージを受け取る程度で、さらにGWL_USERDATAに構造体を
仕込むというのが、Set/GetWindowLongの第二引数のこの値
(GWL_USERDATA)に構造体を仕込むという方法がよくわからないんです。
ですんでGetDlgItemでハンドルを取得して、処理しようと思います。


431 名前:デフォルトの名無しさん :2006/05/31(水) 12:06:58
CかC++かは個人の好みじゃないかな
C++使えれば、MFCやWTLで面倒くさいGUIは楽出来るけどね

> Set/GetWindowLongの第二引数のこの値(GWL_USERDATA)に構造体を仕込むという方法がよくわからないんです。
単にポインタを渡すだけ


432 名前:デフォルトの名無しさん :2006/05/31(水) 12:07:18
>>430
>(GWL_USERDATA)に構造体を仕込むという方法がよくわからないんです
ヒント:ポインタ


433 名前:デフォルトの名無しさん :2006/05/31(水) 12:10:56
>>430
今、わかるものでやっていくのがベストだと思います。

今のご自身のスキルで直感的にWin32APIも勉強しながら
C++も勉強してもやっていけそう。と思えるならやるべきです。
将来的な観点からみればC++で書けるほうがよいと思います。

ちなみに私はC++派です。

434 名前:430 :2006/05/31(水) 12:38:44
>>431さん>>432さん>>433さん
レスありがとうございます。
今の自分のレベルで出来る事をしながら、新たなやり方を模索しつつ
C++でもやっていけそうなら、少しずつやっていこうと思います。

しっかし、この板の人たちは親切だ。
けっこうここで質問してて、そのたびに、適切なアドバイスをくれる。
俺も知識身につけて質問に答えられるようなレベルになろう。
そして、どこかの誰かの質問にこの板で答えていくのが
直接的では無いが、質問に答えてくださってくれる方々への
恩返しだと思うから。



435 名前:デフォルトの名無しさん :2006/05/31(水) 15:09:59
質問です

HANDLE hFile = CreateFile(lpcszPath, GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,NULL);
SetFilePointer(hFile, 1024 * 1024 * 300, NULL, FILE_BEGIN);
SetEndOfFile(hFile);

とすれば、300MBのファイルが高速に作成できますが、これは安全でしょうか?




436 名前:435 :2006/05/31(水) 15:19:55
申し訳ありません、自己解決しますた。
CAtlFile::SetSize()も同じような処理をしていたみたいです。

437 名前:デフォルトの名無しさん :2006/05/31(水) 15:30:58
32APIがあるってことは、次期APIは64bitなの?
それは32と互換性があるとしたら、どれくらい?

438 名前:デフォルトの名無しさん :2006/05/31(水) 16:15:57
>>437
ほぼ100% 互換ですよ。
「プログラミングモデルの同一性」の項を参照。
http://www.microsoft.com/japan/technet/prodtechnol/winxppro/evaluate/xp64ovw.mspx

439 名前:デフォルトの名無しさん :2006/05/31(水) 16:28:53
>>435
俺が過去に作ったロガーは、それで2Gのファイルを先に作成したよ。
ただ、ハードディスクの断片化には注意。

440 名前:デフォルトの名無しさん :2006/05/31(水) 16:29:15
MSさえ生きていれば今まで学んだ事が無に帰ることはないのか。よかった。

441 名前:デフォルトの名無しさん :2006/05/31(水) 17:33:36
まあ、それも幻想に過ぎないわけだけどな

442 名前:デフォルトの名無しさん :2006/05/31(水) 22:41:19
質問です。
MDIで子ウインドウ生成の仕方を教えてください。

443 名前:デフォルトの名無しさん :2006/05/31(水) 22:42:30
親ウインドウに中出し

444 名前:デフォルトの名無しさん :2006/05/31(水) 23:01:41
>>442
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/multipledocumentinterface/usingthemultipledocumentinterface.asp

445 名前:デフォルトの名無しさん :2006/06/01(木) 01:54:41
>>435
XPでは高速だが2000ではそうでもない。

446 名前:デフォルトの名無しさん :2006/06/01(木) 06:04:45
常駐させてコンピュータのロック中だけ処理を行わせたいのですが、
コンピュータがロックされたことを知ることはできないでしょうか。

447 名前:デフォルトの名無しさん :2006/06/01(木) 07:02:13
できますよ

448 名前:デフォルトの名無しさん :2006/06/01(木) 07:15:08
できるかどうか知らんが、思いつくのは
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, ?, ?, SPIF_SENDCHANGE);


449 名前:446 :2006/06/01(木) 12:47:11
SystemParametersInfoの説明みてみました。。
ウィンドウのフラグまわりが怪しそうでしたが、それっぽいのはなさそうですね。

とおもってググり続けてたら、もうしわけない、過去に質問ありました(´∀`)

「Win32API 質問箱 Build4」
> 276 名前: デフォルトの名無しさん 投稿日: 02/06/21 18:19
> >>270
> OpenInputDesktop→GetUserObjectInformationでOK、
> と思って試してみたら、ロックされているときはエラーになるなあ。
> はっ、そうか、エラーが帰ってきたらロックされていると思えばいいんだ。(いいのか?)

結果は書いてなかったので試してみます。


450 名前:デフォルトの名無しさん :2006/06/01(木) 21:59:42
>>442
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win139.html

451 名前:デフォルトの名無しさん :2006/06/01(木) 22:47:43
メニュー項目の横に表示できるチェックマークって
プログラム内からチェック、非チェック状態を切り替えるにはどうすればいいですか?

452 名前:デフォルトの名無しさん :2006/06/01(木) 22:53:05
>>451
SetMenuItemInfo

453 名前:デフォルトの名無しさん :2006/06/01(木) 22:57:39
さんくす

454 名前:デフォルトの名無しさん :2006/06/02(金) 19:08:13
プロパティシートで最初のページのタブにフォーカスが移るようにしたいのですが上手くいきません
コントロールはリソースで作ってるので最初のコントロールに全てフォーカスがあります

最初のページのプロシージャ内のWM_INITDIALOGメッセージ内で
SetFocus(hDlg)、SetFocus(GetParent(hDlg))(一応)、どちらも駄目でした
言うまでも無いですがWM_INITDIALOGは0で返してます

どちらも駄目だったので根本的に違うのかと思ったので
SetFocus(GetDlgItem(hDlg, IDC_HOGE))、SetFocus(GetDlgItem(GetParent(hDlg), IDC_HOGE))
どちらともやってみましたが、こちらもフォーカスが移らず、最初のコントロールに当たってるままでした

プロパティシートのタブのハンドルはプロシージャ内のウィンドウハンドルと違うのでしょうか…
何方かお知恵を貸して頂きたいです・・

455 名前:デフォルトの名無しさん :2006/06/02(金) 19:38:38
>>454
PSM_GETTABCONTROL ?

456 名前:454 :2006/06/02(金) 20:19:14
>>455
PSM_GETTABCONTROLで、出来ましたありがとうございます

タブのフォーカス設定はページのプロシージャで指定するのでは無く
プロパティシートのコールバックで行うようです…
最初のページのプロシージャ内でPSM_GETTABCONTROLを使ってみましたが効果が無かったです
コールバックでPSM_GETTABCONTROLでハンドルを取得してSetFocusで難なく出来ました

あとPSM_GETTABCONTROLはPropSheet_GetTabControlというマクロが用意されてますね
ありがとうございました

457 名前:デフォルトの名無しさん :2006/06/03(土) 06:51:51
処理のタイムアウトを実現しようとして、専用のスレッドで経過時間をチェックしてるのですが、SetTimer()でタイマーを使うと、1msごとに設定しても1msより全然長い間隔で入るみたいです。
しかし、250msごとに設定すると250msに近い間隔で入ってくるみたいです。

これはタイマの分解能によるものだと思うのですが、実際に必要なチェックは1秒ごとで十分だと思うので、1秒ごとに設定しようかと思うのですが、1秒ごとならだいたい正しい時間が得られるでしょうか?

チック割り込みだと結局だんだんズレていくはずだと思うのですが、何かMSDNライブラリを見るとちゃんとCMOS時計を参照してズレを修正するとか何とか書いてあるのですが、これは本当なのでしょうか?

タイマーはやめてGetLocalTime()でチェックした方がいいのでしょうか?

後、このような事をする場合の注意点は、スレッドの優先順位を下げる、という他にあるでしょうか?

458 名前:デフォルトの名無しさん :2006/06/03(土) 08:05:10
SetTimer 精度でぐぐれ

459 名前:デフォルトの名無しさん :2006/06/03(土) 09:36:00
タイムアウトにも精度が必要なんだ

460 名前:デフォルトの名無しさん :2006/06/03(土) 09:45:55
>>457
何の処理のタイムアウトなのかにもよるが、よく使うのは
同期オブジェクト+WaitForSingleObject()


461 名前:デフォルトの名無しさん :2006/06/03(土) 10:38:09
10ms以下はミリ

462 名前:デフォルトの名無しさん :2006/06/03(土) 12:59:37
タイムアウトで精度の高い関数使ってるなら、俺のスペックの低いPCは鬱。

463 名前:デフォルトの名無しさん :2006/06/03(土) 13:09:12
ドラッグしているどうかの判定はどうすればできるのでしょうか?
「紙」のようにドラッグ中にウィンドウを表示させて、ドラッグが終われば非表示にさせたいのですが。

464 名前:デフォルトの名無しさん :2006/06/03(土) 13:33:35
マクロ言語(UWSC)から、WIN32APIを呼び出して、
バックグラウンドのウインドウに対し左矢印キーを1秒間押し続ける
ことをしたいのですが、上手くいきません。
WIN32APIの知識が全くないので、色々調べてはいるのですが、
非常に難しく分からないことだらけなので、以下の質問に
お答えいただけるとありがたいです。(ちんぷんかんな質問であれば申し訳ありません)
<質問>
PostMessageAを使用して左矢印キーをポストしようと思い、以下のように記述しましたが、
動かないのです。各々のパラメータの設定は正しいのでしょうか?
WIN32APIの部分が悪いのか、UWSCの書き方がまずいのか切分けたいのです。

Hwnd:バックグラウンドのウィンドウのID
WM_KWYDOWN = $0100
WM_KEYUP = $0101
PostMessageA(Hwnd, WM_KEYDOWN, VK_LEFT, NULL)
PostMessageA(Hwnd, WM_UP, VK_LEFT, NULL)
*1秒間押し続ける場合というのは実装してません

あと、1秒間押し続ける場合は恐らくiparamのところに記述するようにすればいいと思ってますが、
間違っているでしょうか?

以上よろしくお願いします

465 名前:デフォルトの名無しさん :2006/06/03(土) 14:08:35
>>464
キーボードはメッセージを送るよりも、keybd_eventかなにかを使ったほうがいいと思う。

466 名前:デフォルトの名無しさん :2006/06/03(土) 14:21:59
質問です。
インターネット上のショートカットを右クリックしたときのポップアップメニューに
自分用の項目を一つ追加したいと思っています。
その項目の内容は詳しくは書きませんが、
クリックしたショートカットのアドレスを表示するようなものです。
ですが方法がまったくもって分かりません。教えてもらえないでしょうか?

メニュー自体の作り方や表示方法はわかっています。

467 名前:464 :2006/06/03(土) 14:47:05
>>465
レスありがとうございます。
keybd_eventやってみましたが、アクティブウインドウへの実行になってしまいました。
バックグランドのウインドウに対してもこのAPIを使用できる方法があるのでしょうか?


468 名前:デフォルトの名無しさん :2006/06/03(土) 15:03:21
>>466
インターネット上のショートカットというのが、拡張子urlのファイルのことなら関連付けを追加すればよい。

Internet Explorerで表示しているHTML上のハイパーリンクのことなら、
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt以下にキーを追加すればよい。
詳しくはググれ。

469 名前:466 :2006/06/03(土) 16:19:37
>>468
質問する場所が間違っていたみたいですね。
それなのにそこまで教えてくれるとは・・・
親切にありがとうございますm(__)m

470 名前:デフォルトの名無しさん :2006/06/03(土) 18:08:21
>463
static int sw = 0;

case WM_LBTNDWN:
sw = 1;
break;
case WM_LBTNUP:
sw = 0;
break;
case WM_MOUSEMOVE:
if(sw){
honyarara;
}else{
honyarara;
}
break;

471 名前:463 :2006/06/03(土) 20:34:23
ありがとうございます。
あとは、ドラッグしているものがファイルかテキストか判断できればいいのですが。。。
ご存知の方、よろしくお願いします。

472 名前:470 :2006/06/03(土) 20:57:26
ごめん、寝ながら適当に書いたソースで感謝されるとは思わなかった。
お詫びとして「マウスキャプチャー」という単語を渡しておくから後は好きにしてくれ。

473 名前:デフォルトの名無しさん :2006/06/03(土) 23:11:48
スレ違いだったらごめんなさい。どこに聞いたら良いか微妙だったんで。

WinAPIを呼び出すメカニズムについての質問です。

普通、システムコールをする場合eaxレジスタなどに番号を指定して、
ソフトウェア割り込みをしたすると、OSの割り込みハンドラは戻りアドレスを
スタックに載せたり、割り込みベクタから適切な処理を選択したりして、、、、
というなのを習った記憶があります。

「OSの割り込み〜」以降の処理はOS内部の処理なのに、どうして各プロセスは
Kernel32.dllを個別にメモリにマップする必要があるんでしょうか。

長文スマソ。

474 名前:デフォルトの名無しさん :2006/06/03(土) 23:16:36
個別なんだ
知らなかった

475 名前:デフォルトの名無しさん :2006/06/03(土) 23:36:20
>>473
まずはAPIと言う単語の意味から調べろ。

476 名前:デフォルトの名無しさん :2006/06/03(土) 23:40:25
>>473
こいつ何なんだよー、頭良いのか悪いのかよく分からんなー。
そんな難しい事考えてる暇があったら、少しは既存の文書ぐらい目を通せよなー。

と、思ったが、ただのホームレス予備軍、現暇人か。
ちゃんと働けよ。日本の為に、地球の為に。
この世の中はお前1人が住んでるだけじゃぁねぇんだからな。
そこんとこよ〜く考えて今日は眠れ。じゃなっ!

477 名前:デフォルトの名無しさん :2006/06/03(土) 23:46:41
>>473
ttp://itpro.nikkeibp.co.jp/article/Windows/20051111/224393/?ST=win-client

478 名前:デフォルトの名無しさん :2006/06/04(日) 00:08:53
>>476
お前どこの酔っ払ったオッサンだよ。

479 名前:473 :2006/06/04(日) 00:43:54
>>477
分かりやすい解説ありがとうございました。
いろいろ検索してみたのですが、一番良かったです。

480 名前:デフォルトの名無しさん :2006/06/04(日) 04:18:43
MessageBox関数で表示されるウィンドウのような
タイトルバーとキャプションはあって、アイコンが無いウィンドウって、
CreateWindowでどうやたら作れますか?

481 名前:デフォルトの名無しさん :2006/06/04(日) 04:28:24
ウィンドウプロシージャ書いて、
RegisterClass でウィンドウクラス登録して、
CreateWindow する。

482 名前:デフォルトの名無しさん :2006/06/04(日) 05:05:34
>>481
ありがとうございます、できました!!

483 名前:デフォルトの名無しさん :2006/06/04(日) 08:17:03
ツリービューのルートアイテムをソートする方法はありますか?

484 名前:デフォルトの名無しさん :2006/06/04(日) 15:57:45
はい

485 名前:デフォルトの名無しさん :2006/06/05(月) 19:56:43
仮想リストビュー使っているのですが、
CtrlやShiftを押してない状態でAとかBとかのキーを押すと
一番初めの項目へフォーカスが移動してしまいます
このフォーカス移動を殺すにはどうすれば良いんですか?

486 名前:デフォルトの名無しさん :2006/06/05(月) 21:01:36
気がつかなかった
俺も直さないとだめだけど
気にしないでおこう

487 名前:デフォルトの名無しさん :2006/06/05(月) 21:54:43
ウィンドウの最大化の挙動を制御したいのですがここで質問

最大化ボタンを押した時の動作はWM_SYSCOMMANDのSC_MAXIMIZEを拾う事で変えられたたですが、
タイトルバーをダブルクリックした時は相変わらすデフォルトの最大化動作になってしまいます。
タイトルバーをダブルクリックした時のメッセージは何を拾うのでしょう?(´・ω・` )

488 名前:デフォルトの名無しさん :2006/06/05(月) 21:57:00
WM_NCLBUTTONDOWNだったかな?良く覚えてない、間違えてたらすまん

489 名前:デフォルトの名無しさん :2006/06/05(月) 22:21:38
最大化しようとしているよ、っていうWM_WINDOWPOSCHANGINGを拾えばいいんでないの?

490 名前:デフォルトの名無しさん :2006/06/05(月) 22:50:15
>>489
ヘルプでWM_WINDOWPOSCHANGINGを調べましたがイマイチよく解りませぬ
lParamで渡されるWINDOWPOSのx,y,cx,cyがワークエリア目一杯だったら最大化
しようとしてると判断するんですかね?

>>488
int Ypos,upper_,lower_;
RECT rcWindow;

case WM_NCLBUTTONDBLCLK:
GetWindowRect(hWnd,&rcWindow);
Ypos= HIWORD(lParam);
upper_= rcWindow.top + GetSystemMetrics(SM_CYBORDER);
lower_= upper_ + GetSystemMetrics(SM_CYCAPTION);
if(upper_ < Ypos && Ypos < lower_) OutputDebugString("(´・ω・` ) \n");
break;

こんなコード書いちゃったよヽ(`Д´)ノ
明らかに変だ

491 名前:デフォルトの名無しさん :2006/06/05(月) 23:07:23
>>490
SendMessage(WM_NCHITTEST, ...) して HT_CAPTIONだったら、
てな感じにするのが良いのではないだろうか。

492 名前:デフォルトの名無しさん :2006/06/05(月) 23:41:07
>>487
挙動制御っていうのは無効化じゃないの?

最大化を無効にしたいのであれば
DeleteMenu(GetSystemMenu(hWnd, FALSE), SC_MAXIMIZE, MF_BYCOMMAND);
ちゃんとボタンも無効化させるのなら
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & ~WS_MAXIMIZEBOX);
も追加。

493 名前:487 :2006/06/05(月) 23:50:29
>>491
>SendMessage(WM_NCHITTEST, ...) して HT_CAPTIONだったら、

正直具体例が無いと解り難い… orz
ヒットテストでぐぐるとWM_NCHITTESTが来たときに特定のヒットコードを返す例ばっかだった… orz
あとWM_NCHITTESTはDefWindowProc()の戻り値、つまりDefWindowProc()に渡さないと判別できず、
渡してしまうと後の祭りで制御が出来ない気が…

>>492
無効化じゃないのです。無効化だけならその例の通りで実現済みなのですが…
タイトルバーをダブルクリックした時に、最大化ではなくてウィンドウサイズを任意のサイズに変更したいのです。
MAME32というエミュでゲームをウィンドウモードで起動した時にこれができてるのよね(´・ω・`;)

494 名前:492 :2006/06/06(火) 00:00:54
>>493
任意のサイズにしたいのなら、WM_GETMINMAXINFOを捕まえて
lParam(LPMINMAXINFO)のptMaxSizeを弄ればいいよ。

495 名前:487 :2006/06/06(火) 00:25:03
>>494
やりたいことがこれで実現できますた、マリガトウございます。
MAME32とは挙動が違うけどもうどーでもいいや。

つか今までWM_SIZINGでトラックサイズやらウィンドウサイズ上限/下限やら一々全部計算してやってたのに、
同じ事がこんなに簡単にできたのね。 ○<\_

496 名前:デフォルトの名無しさん :2006/06/06(火) 14:45:47
>>493
WM_NCHITTESTは、渡した座標が非クライアントエリアのドコにあるかを調べるメッセージ。
これ呼んだだけで最大化されたりはしません。

497 名前:デフォルトの名無しさん :2006/06/06(火) 18:48:16
プロパティシート上のリストボックスで上下キー(VK_UP、VK_DOWN)を押すと、2項目ずつ移動するのは仕様ですか?
(プロパティシートでない)普通のダイアログ上のリストボックスならちゃんと1項目ずつ移動してくれるのですが…

498 名前:デフォルトの名無しさん :2006/06/06(火) 19:12:07
MCIは音声を同時再生できるのかしら?

499 名前:497 :2006/06/06(火) 19:17:36
自己解決しました;

500 名前:485 :2006/06/06(火) 20:08:53
とりあえず自己解決しました
一応解決させた方法書いときますと、ListViewをサブクラス化して
WM_CHARを捕まえ、CtrlとかShiftが押されてない時には
wParamに0をぶち込むことによってフォーカス移動を殺せました


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.