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


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

Win32API質問箱 Build25
251 名前:デフォルトの名無しさん :04/12/05 23:54:32
>>248
case WM_COMMAND: の前の case 句で break してないとか。

252 名前:デフォルトの名無しさん :04/12/05 23:56:16
Kansu01 の戻り値がオート変数へのポインタというのはどうかと…
せめて、static char buf にしとかないか。


253 名前:デフォルトの名無しさん :04/12/05 23:57:26
>>252
void Kansu01(char *buf) {
    strcpy( buf, "あああ");
}
とかにして、
Kansu01(buff);
と呼び出すとかね。

254 名前:デフォルトの名無しさん :04/12/05 23:57:35
Kansu01は呼ばれてないじゃんか。


255 名前:デフォルトの名無しさん :04/12/06 00:00:36
> WM_COMMAND:
> strcpy( buff, Kansu01 );

case WM_COMMAND:
strcpy( buff, Kansu01( ) );
のことかと補完して読んだんだけど、
本当に case や ( ) が抜けているのかも?

256 名前:245 :04/12/06 00:08:20
皆さんレスありがとうございます。
上のソースは「こんな感じ」的に書いたので省略しすぎました。
…が、>>255さんがおっしゃるように、本当に抜けている部分があるかもしれないので、
よく確認してみようと思います。
その後、>>253さんのような手法に変更したいと思います。

最後にもう一つ聞かせてください。

char buff01[100];
char *buff02 = "いいい";

strcpy(buff01, buff02);

のように、非ポインタ型の文字列(?)と、ポインタ型の文字列を混同させてしまっても問題ないのでしょうか?

257 名前:デフォルトの名無しさん :04/12/06 00:08:34
省略するのは良いが、省略の仕方が悪いよな。意味が分からなくなってる

258 名前:デフォルトの名無しさん :04/12/06 00:09:39
>>256
問題ない。それぞれの意味を考えれば分かるよ。
(それから buff01 とかいう命名法はやめたほうが。。。)

259 名前:245 :04/12/06 00:14:01
>>257
すいませんでした。確かに読み返してみたら意味わからなくなってました。
以後、気をつけます。

>>258
ありがとうございます。もう一度基礎の部分を勉強しなおしてみようと思います。

260 名前:デフォルトの名無しさん :04/12/06 00:14:05
>258
why?

261 名前:デフォルトの名無しさん :04/12/06 00:18:50
>>260
命名のこと?そりゃ意味が分かりにくいからさ。
すぐに意味がとれるちょっとした変数なら別にいいんだけど、
01 とか書いてあると2桁までこの変数名が続くのかなと、恐ろしく思ったよ。

262 名前:デフォルトの名無しさん :04/12/06 07:22:07
>261
へー

263 名前:デフォルトの名無しさん :04/12/06 07:22:35
>256
サンプルコードの命名までうだうだ言われるのかー

264 名前:デフォルトの名無しさん :04/12/06 09:52:16
人目につくものはうだうだいわれる宿命。

265 名前:デフォルトの名無しさん :04/12/06 10:39:42
メッセージボックスのボタンを押す → WM_COMMAND の無限再入ってことはないか

266 名前:デフォルトの名無しさん :04/12/06 12:01:24
>>261
ハンガリー記法?
ソースだと分かるけど、あれ位の質問用なら良いと思う

そもそも、数字が2桁って事より、ポインタと配列が同じ命名規則って方が気になったけど
(引数を逆にして使ってしまったりして・・・)

267 名前:デフォルトの名無しさん :04/12/06 13:07:49
WM_KEYDOWNについて質問なのですが、
ウィンドウ(ダイアログではない)上にあるチェックボックスを操作した後に、メインウィンドウのプロシージャにメッセージが来ません
チェックボックスやボタンなどの子ウィンドウにフォーカスが移ってもキーメッセージが来るように出来ませんか?
キーを押したタイミングさえ分かれば、WM_COMMANDなどでも良いのですが・・・これも来ません・・・

調べた限り、MFCなら簡単に出来そうでしたがbccなので使えません
フック関数やプロシージャの変更はプログラムが複雑になりそうで、出来れば避けたいです
他にも方法を考えているのですが、通常はどのように対処しているのでしょうか

268 名前:デフォルトの名無しさん :04/12/06 17:27:24
アプリからスクリーンセーバを起動して、アプリがスクリーンセーバを止めるまで
起動させ続けたいのですがどうしたら良いでしょうか?

OpenDesktopで取ってきた"Screen-Saver"のDeskハンドルを使って、EnumDesktopWindowsを
呼び出してWindowハンドルを取得。
このWindowのプロシージャを、WM_CLOSEを無視するプロシージャにSetWindowLongで置き換え
たのですが上手くいきませんでした。


269 名前:デフォルトの名無しさん :04/12/06 19:01:29
ValidateRect関数って何に使うんですか?
使い道がよく分からない。

270 名前:デフォルトの名無しさん :04/12/06 20:05:42
>>269
その関数名はどこで見た情報で得た?

271 名前:デフォルトの名無しさん :04/12/06 20:13:47
>>268
マウスやキーボードメッセージを捨ててみては?

272 名前:270 :04/12/06 20:24:12
すいません。270を訂正します。

その関数名はどこで見た情報から知ったか教えてください。

273 名前:デフォルトの名無しさん :04/12/06 22:57:20
>>269
最近ValidateRectを使った例から。
自分のウィンドウにスクロールバーをつけたとき、スクロールバーがドラッグされている間は画面は変化せず、
マウスボタンが離されてから、一気にその位置までスクロールするようにした。
するとスクロールバーのドラッグ中は勝手に再描画されるらしく、ウィンドウ内がちらつくようになった。
そこでスクロールバーのドラッグされている間はValidateRectを呼ぶようにした。
これで見事ちらつきはなくなったとさ。めでたし、めでたし。

274 名前:デフォルトの名無しさん :04/12/07 00:20:28
COLORREFは、符号有りか無しのどちらでしょうか。
調べると32ビットとは書いてあるのですが。教えてください。

用途としては、文字を表示する関数で、背景色の引数に負を渡した時、
透過して表示とかに使いたいのです。
符号無しだった時は、0xffffffを超えた値を渡した時にする予定です。

275 名前:デフォルトの名無しさん :04/12/07 00:30:10
typedef unsigned long DWORD;
typedef DWORD COLORREF;

276 名前:デフォルトの名無しさん :04/12/07 00:32:47
>>274
CLR_INVALIDとかなんとかいう定数もあった気がする。

277 名前:274 :04/12/07 00:33:36
>>275
分かりました。ありがとうございました。

278 名前:274 :04/12/07 00:43:45
>>276
ありました。ありがとうございます。

279 名前:デフォルトの名無しさん :04/12/07 12:03:30
ProcessIDが判明している状態でProcessにWM_CLOSEとかのメッセージを送るには
どうしたらいいの?

280 名前:デフォルトの名無しさん :04/12/07 12:16:02
EnumWindowsしてGetWindowThreadProcessIdでプロセスIDが一致するウィンドウ全てにメッセージ送付。

281 名前:デフォルトの名無しさん :04/12/07 12:36:07
インスタンスハンドルというものがあるのですが

インスタンスは メモリ上のプログラム
これを識別するための番号がインスタンスハンドルだそうなのですが

メモリ上のプログラムとはいったいどんな物なのでしょうか?

282 名前:デフォルトの名無しさん :04/12/07 12:47:39
>>281
ようするに大雑把に言うとメモリにロードされたEXEファイルの中身

283 名前:デフォルトの名無しさん :04/12/07 12:54:27
大雑把にもなっていない

284 名前:デフォルトの名無しさん :04/12/07 13:12:47
>283
じゃあ君が教えてあげれば?

285 名前:デフォルトの名無しさん :04/12/07 21:12:21
マウスの左ボタンを連打してると
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONUP
WM_LBUTTONDOWN
…みたいな感じでWM_LBUTTONUPが
複数回連続して送られてくる事があるのですが
WM_LBUTTONUPの後にWM_LBUTTONUPは
ありえないと思うのですが、これは、仕様なのでしょうか?

286 名前:デフォルトの名無しさん :04/12/07 21:18:26
>>285
クライアントへドロップしたときはどんなだっけ?

287 名前:デフォルトの名無しさん :04/12/07 21:53:30
HINSTANCEってNULLを指定するとどういう意味になるの?
HWNDはデスクトップのハンドルと同じ意味になるけど

288 名前:デフォルトの名無しさん :04/12/07 23:08:39
DLL

289 名前:デフォルトの名無しさん :04/12/07 23:21:42
DLL内でWH_KEYBOARDを指定したフックの有効範囲ってSASを除いたSYSTEM全体に及ぶの?
それともDeskTop単位止まり?


290 名前:デフォルトの名無しさん :04/12/07 23:58:17
ドラッグアンドドロップを設定したのですが。
子ウィンドウすべてにドラッグアンドドロップ属性みたいなのがついてしまいます。
特定のウィンドウにのみドラックアンドドロップ属性を設定したいときはどうすればいいのでしょうか?

291 名前:デフォルトの名無しさん :04/12/08 00:00:13
>>290
前スレに解決方法が書いてあった


292 名前:デフォルトの名無しさん :04/12/08 01:02:15
>>291
すみません。ドラッグで検索かけたところみつからないです。

293 名前:285 :04/12/08 02:33:50
>>286
「クライアントへドロップ」とは?
試してみれば、わかりますがマウスは移動させてません。
同じ場所で連打していても、WM_LBUTTONUPが複数回
連続して送られてくるのです…。
色々と試してみたのですが、条件がわかりませんが
WM_LBUTTONDOWNを取りこぼす時があるらしいです。

294 名前:デフォルトの名無しさん :04/12/08 02:47:21
連打しすぎてマウスボタンが壊れたとか

295 名前:285 :04/12/08 03:23:48
原因がわかりました。
WM_LBUTTONDBCLKがきてました。

WM_LBUTTONDOWN
WM_LBUTTONUP
(WM_LBUTTONDBCLK)
WM_LBUTTONUP
WM_LBUTTONDOWN

という感じでした。WM_LBUTTONDBCLKの時は
WM_LBUTTONDOWNは来ないんですね…。
お騒がせしました。

296 名前:デフォルトの名無しさん :04/12/08 03:27:33
>>290
IDropTargetを使ってきめ細かく制御すればいいんじゃない?

297 名前:デフォルトの名無しさん :04/12/08 07:04:25
アクティブでないウィンドウにキーボードイベントを送ろうとしています

SPY++を使ってNOTEPADのEditを監視しつつキーボードのAを叩くと
P WM_KEYDOWN wParam:00000041 lParam:001E0001
P WM_CHAR wParam:00000061 lParam:001E0001
P WM_KEYUP wParam:00000041 lParam:001E0001

とありましたので、
PostMessage(hWnd,0x0100,0x41,0x1E0001); /*hWndはEditのウィンドウハンドル*/
PostMessage(hWnd,0x0102,0x61,0x1E0001);
PostMessage(hWnd,0x0101,0x41,0x1E0001);
とした所、Post毎にWM_IME_NOTIFYが発生してaが三回入力されてしまいました
キーボードを叩いたときと同じ動作をさせたい場合はどうしたらよいのでしょうか?
勘違い、知識不足があったらご指摘いただけると幸いです
よろしくお願いします

298 名前:デフォルトの名無しさん :04/12/08 10:31:22
なんでkeybd_eventを使わないの?

299 名前:デフォルトの名無しさん :04/12/08 10:33:16
>298
知らなかったから。

300 名前:デフォルトの名無しさん :04/12/08 10:44:13
>>298
アクティブでないウィンドウにキーボードイベントを送ろうとしています
keybd_eventはアクティブでないウィンドウにも送れるのでしょうか?
>この関数は SendInput 関数に取って代わられました。
という記述も見ましたが、SendInputでも非アクティブのウィンドウには送れない様なので
SendMessageを使いました
keybd_eventでもウィンドウをアクティブにすることなく仮想キーを送れるのでしたら
ご教授いただけませんでしょうか?
ここ4日間Googleの検索結果と戯れましたが自分には検索できませんでした

301 名前:297=300 :04/12/08 10:59:18
この板はID出ないのですね
>>300>>297です
失礼しました

302 名前:デフォルトの名無しさん :04/12/08 11:31:44
フックについて質問があります。
サービスからキーボードの入力をブロックするプログラムを作成しているのですが、
上手くいかず困っています。お知恵をお貸しください。
行なった事は以下の通りです。ServiceはSystemLocalAccountで動作しています。

1)LogonUserのトークンを取得
2)<http://support.microsoft.com/default.aspx?scid=kb;ja;173687>のサンプル
コードを参考にして、ApplicationDesktopと接続
3)1のトークンを使ってImpersonatLoggedOnUser()で偽装(*1)
4)DLL内に作成した関数で、WH_KEYBOARD(*2)とWH_MOUSEを指定してHOOKをかける
5)RevertToSelf()で偽装解除(*1)
6)2を参考にしてApplicationDesktopとの接続を終了

上記の処理で概ねキー入力のブロックは出来ているのですが、コマンドプロンプトが
起動していると、コマンドプロンプト内でキー入力可能な状態になってしまいます。
上記、4のみを行なう通常のApplicationを作成してLogon中のUserAccount上で実行す
ると上記の不具合は、発生しませんでした。
私としては、Logon中のUserAccount上でHookApplicationを実行するのと同じ事をして
いるつもりなのですが、どうにも腑に落ちません。何か間違った事をしてますでしょ
うか?

(*1)元は無かったのですが、UserContextの問題なのかと思い追加しました
(*2)WH_KEYBOARD_LLも試してみましたが、結果はかわりませんでした


303 名前:302 :04/12/08 11:40:29
>>302
開発環境が抜けていました。申し訳ありません。

"Win2KPro + VC++6"

です。よろしくお願いします。

304 名前:デフォルトの名無しさん :04/12/08 12:35:15
WinSockで取得した文字列をTextOutで表示したいのですができません。
何も表示されないんです。
なぜでしょうか?

同じ位置に、TextOutで文字列を直接指定して表示しようとしたらできました。
また、WinSockで取得した文字列をMessageBoxで表示したらちゃんと表示されました。

WinSockで取得した文字列の描画だけが上手くいかないようです。

305 名前:デフォルトの名無しさん :04/12/08 12:38:56
>>304
しばらく休んで病院行け

306 名前:305 :04/12/08 12:41:55
すいません。精神科に通院中なので変な書き込みをしてしまいました。
無視してください。

307 名前:デフォルトの名無しさん :04/12/08 12:42:33
>304
ソースを抜粋して見せられませんか?

308 名前:デフォルトの名無しさん :04/12/08 12:44:49
SendMessage(hWnd,0x0100,0x41,0x1E0001); /*hWndはEditのウィンドウハンドル*/
SendMessage(hWnd,0x0102,0x61,0x1E0001);
SendMessage(hWnd,0x0101,0x41,0x1E0001);


309 名前:デフォルトの名無しさん :04/12/08 12:47:19
>308
これはどれへのレスだ?

310 名前:デフォルトの名無しさん :04/12/08 12:47:37
>>304
UNICODE?

311 名前:デフォルトの名無しさん :04/12/08 12:48:15
>>308-309
>>297-301

312 名前:デフォルトの名無しさん :04/12/08 12:51:58
>311
おお。スマン

313 名前:デフォルトの名無しさん :04/12/08 12:56:43
>>312
家々

314 名前:デフォルトの名無しさん :04/12/08 13:05:46
なんで数値直接?

315 名前:デフォルトの名無しさん :04/12/08 13:12:35
>>297
単にWM_KEYDOWNがTranslateされて、2回WM_CHARが行っただけな気が
その目的ならスキャンコードもいらないでしょ
SendMessageは通らなかった気がする

PostMessage( hWnd, WM_KEYDOWN, 'A', 0 );
PostMessage( hWnd, WM_KEYUP, 'A', 0 );

316 名前:69式フリーPG ◆hND3Lufios :04/12/08 13:15:08
だね。WM_CHARはいらない。

317 名前:304 :04/12/08 13:15:55
>>307
これです。
メニューの項目を選択したときにこの関数が呼ばれます。

>>310
すいません、わかりません。

BOOL MySock(HWND hWnd){
    WORD WinSockVersion=MAKEWORD(2,2);
    WSADATA wsa;
    char *SendData="GET /mytest/My.fj HTTP/1.0\r\nUser-Agent:My\r\n\r\n";
    char MyBuf[1024];
    char Myip[]="IPアドレス"; //アクセス先のIPアドレス、ローカル鯖でテストしています。
    unsigned long ip;
    
    //WinSockの初期化
    WSAStartup(WinSockVersion,&wsa);
    
    //ホスト情報の作成
    ip=inet_addr(Myip);
    LPHOSTENT hostent=gethostbyaddr((const char *)&ip,4,AF_INET);
    
    //ソケットの作成
    SOCKET hMySock=socket(AF_INET,SOCK_STREAM,0);
    


318 名前:304 :04/12/08 13:16:44
    //ソケットアドレスの作成
    SOCKADDR_IN sockaddr;
    sockaddr.sin_family=AF_INET;
    sockaddr.sin_port=htons(80);
    sockaddr.sin_addr=*((LPIN_ADDR)*hostent->h_addr_list);
    
    //接続
    connect(hMySock,(LPSOCKADDR)&sockaddr,sizeof(SOCKADDR_IN));
    //送信
    send(hMySock,SendData,strlen(SendData),0);
    //受信
    recv(hMySock,MyBuf,sizeof(MyBuf)-1,0);
    MessageBox(hWnd,MyBuf,"OKです",MB_OK);

    //表示
//問題の箇所です
    PAINTSTRUCT ps;
    HDC hdc;
    hdc=BeginPaint(hWnd,&ps);
    SetTextColor(hdc,RGB(255,100,200));
    TextOut(hdc,0,0,MyBuf,strlen(MyBuf));
    EndPaint(hWnd,&ps);
    
    //ソケットを閉じる
    closesocket(hMySock);
    WSACleanup();
    return TRUE;
}

319 名前:デフォルトの名無しさん :04/12/08 13:22:18
BeginPaintを何だと思ってやがる。

320 名前:デフォルトの名無しさん :04/12/08 13:27:04
>319
おまじないでしょ?

321 名前:69式フリーPG ◆hND3Lufios :04/12/08 13:27:50
>>318
問題の箇所はWM_PAINTで呼ばれるんだよね?

322 名前:デフォルトの名無しさん :04/12/08 13:29:53
HDC hdc;
hdc=GetDC(NULL);
SetTextColor(hdc,RGB(255,100,200));
TextOut(hdc,0,0,MyBuf,strlen(MyBuf));
ReleaseDC(hdc);


323 名前:デフォルトの名無しさん :04/12/08 13:31:27
「同じ位置に、TextOutで文字列を直接指定して表示しようとしたらできました。」
とある。

324 名前:デフォルトの名無しさん :04/12/08 13:33:23
MyBufの中に'\0'が入ってるんじゃないの?

325 名前:デフォルトの名無しさん :04/12/08 13:34:48
「また、WinSockで取得した文字列をMessageBoxで表示したらちゃんと表示されました。」
とある。

326 名前:デフォルトの名無しさん :04/12/08 13:35:05
>>324
俺もそう思ったけど、それだとMessageBoxでも表示されないと思う

327 名前:デフォルトの名無しさん :04/12/08 13:35:23
MuBufはオート変数だが、実は//問題の箇所です以下は別関数ってこたないだろうなw

328 名前:デフォルトの名無しさん :04/12/08 13:35:52
とりあえず MyBuf の内容をファイルに出力して
あとでダンプ見てみれば

329 名前:304 :04/12/08 13:36:49
>>319
クライアント領域に描画するときのあれです。

>>321
>>317-318の関数内で呼ばれるんです。

>>322
試してみます。

>>323
はい。
TextOut(hdc,0,0,MyBuf,strlen(MyBuf)); を
TextOut(hdc,0,0,"テスト",6); と置き換えると、これはちゃんと表示されるんです。

>>324
えっと・・・

>>325
はい。
MessageBox(hWnd,MyBuf,"結果",MB_OK); で取得した文字列の表示はできました。

330 名前:304 :04/12/08 13:41:17
>>322
ReleaseDC(hdc)のところでエラーが出ました。
HWND型のを指定しなければならないとか。
パラメータが足りないとも出ます。

>>327


>>328
なるほど。
それをやってみます。

331 名前:69式フリーPG ◆hND3Lufios :04/12/08 13:43:25
いまいちよく分からんが。

static char MyBuf[1024];

ZeroMemory(MyBuf, sizeof(MyBuf));

332 名前:デフォルトの名無しさん :04/12/08 13:45:03
>>322
ReleaseDC(hWnd, hdc);
>>330
これくらい自分で調べろ

333 名前:304 :04/12/08 13:50:39
>>322,>>332
表示されました!
何が悪かったのでしょうか?

334 名前:一星 ◆Cppn/.YI3. :04/12/08 13:51:48
BeginPaint・EndPaintはWM_PAINTが送られた時にしか使ってはいけなかったのでは。

335 名前:69式フリーPG ◆hND3Lufios :04/12/08 13:53:52
そういうことか。。。w

336 名前:デフォルトの名無しさん :04/12/08 13:54:29
やっぱりな

337 名前:デフォルトの名無しさん :04/12/08 13:55:17
おいおい
> TextOut(hdc,0,0,"テスト",6); と置き換えると、これはちゃんと表示されるんです。
じゃなかったのかよ

338 名前:デフォルトの名無しさん :04/12/08 13:55:28
「同じ位置に、TextOutで文字列を直接指定して表示しようとしたらできました。」
これはウソなのか?

339 名前:デフォルトの名無しさん :04/12/08 13:56:32
>>333 は釣り

340 名前:一星 ◆Cppn/.YI3. :04/12/08 13:57:51
>>338
うーん……。
偶然なんじゃないか?
WM_PAINTが送られた時以外でBeginPaint・EndPaintを使っても
うまくいく保障はないが、偶然にうまくいく可能性はあるとか。

341 名前:304 :04/12/08 14:00:46
>>334
なるほど。
これから気をつけます。

>>337-338
・・・今やったらできませんでしたorz
でも、さっきは4回確認して4回とも表示されたんですけど・・・。

回等してくださった皆様、ありがとうございました。

342 名前:デフォルトの名無しさん :04/12/08 14:02:07
つまんね

343 名前:デフォルトの名無しさん :04/12/08 14:02:21
結論:アレゲなやつの質問では、ソース以外信用してはならない。

344 名前:デフォルトの名無しさん :04/12/08 14:04:13
もっとすごい落とし穴があるのかと思ってたよ

345 名前:デフォルトの名無しさん :04/12/08 14:14:06
アレゲなんてアイタタ語を使ってしまうやつの言葉は何一つ信用してはいけない

346 名前:デフォルトの名無しさん :04/12/08 14:23:53
>>345==>>304

347 名前:デフォルトの名無しさん :04/12/08 14:35:32
>346
根拠は?

348 名前:デフォルトの名無しさん :04/12/08 14:37:38
>>346
残念ながら、巡回時にキモい単語が目に付いたから脊髄反射しただけですよ。

349 名前:デフォルトの名無しさん :04/12/08 14:51:42
アレゲは駄目でキモいとかアイタタはいいのか。
何一つ信用できない感性だな。

350 名前:デフォルトの名無しさん :04/12/08 14:57:55
アレゲってなに?

351 名前:デフォルトの名無しさん :04/12/08 15:06:23
http://slashdot.jp/

352 名前:デフォルトの名無しさん :04/12/08 15:14:03
>>349
郷に入りては郷に従え、って言葉知ってます?

353 名前:デフォルトの名無しさん :04/12/08 15:15:06
だから、脊髄反射なんかゆーてるキテガイを相手にすんなって。

354 名前:デフォルトの名無しさん :04/12/08 15:27:35
そうだよな脊椎反射だよな。

355 名前:デフォルトの名無しさん :04/12/08 15:35:54
>>341
スレ荒れて面倒だから答える。
recv は、
・もうデータがないとき 0 を返す
・まだデータがある場合は、1以上指定したバッファサイズ以下だけ読み込んで、読み込んだサイズを返す
 一回の recv で実際に何バイト読まれるかは状況しだい。recvしてみないとわからない。
っていう仕様だよ。

データを全部読むなら、0を返すまでループでまわしてバッファの後ろに連結する必要がある。
んで MessageBox に渡すなら、最後にNULLキャラクタ( '\0' )を付加する。

356 名前:デフォルトの名無しさん :04/12/08 16:20:09
クライアント(描画領域)サイズを 640x480 にしたい場合
ウインドウスタイル(枠線やらメニューやら)によって
ウインドウ生成時のサイズが変わりますよね 650x510(←てきとう)みたいに大きめに。

クライアントサイズをw*hにしたい場合は、(このウインドウスタイルなら)W*Hで作れるよ。
って数値を逆算してくれるAPIってありますか?
無いなら、それを計算する方法を説明したサイトってありませんか?



357 名前:デフォルトの名無しさん :04/12/08 16:23:17
>>356
AdjustWindowRect

って、前スレにも同じ質問があったような・・・

358 名前:デフォルトの名無しさん :04/12/08 16:23:19
AdjustWindowRectEx

359 名前:デフォルトの名無しさん :04/12/08 16:25:32
大変、申し訳ございませんが、ひとつ教えていただきたいことがあります。

ローカルマシンでなく、ネットワークのマシンで、
プロセスを列挙するようなAPIってないでしょうか?
また、そのプロセスがどのユーザで動いているか
わかることができればより助かります。

WTSEnumerateProcessesとLookupAccountSidを
組み合わせれば可能であることを確認したのですが、
ターミナルサービスに対応していないと駄目なようなのです。

WinNT Server、Win2000 Server、Win2003上で確実に動作する。
そんな素敵なプロセス列挙APIをご存知ないでしょうか?

教えてくださいこのやろうども。

360 名前:デフォルトの名無しさん :04/12/08 16:27:02
>>357,358
すげー。
ありがとう。

361 名前:297 :04/12/08 16:46:43
>>308
>>314
>>315
>>316

レスありがとうございます
>>314
環境がPerlでWin32-APIを使っているもので、変数が定義されていないからです
環境の記入漏れがあって申し訳ありません

>>315
実際は3回行っていました
仰る通りPostMessageにしたら期待通りの動作が出来ました
ありがとうございました

実際のキーボードもこのようにリターンを待っているのでしょうか
>指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返しません
と言う記述を見て、キーボードは返り値を待たないのではと勝手に思い込み
この関数は試していませんでした
勝手な思い込みはダメですね、気をつけます

362 名前:297 :04/12/08 17:35:21
三回入力されていた原因は、WM_KEYUPのlParamを0xC01E0001にしていなかった
ミスによるものでした
lParamを0xC01E0001にしたところ、二回入力となりました

SendMessageではWM_CHARを送らなければ文字は入力されませんでした


363 名前:デフォルトの名無しさん :04/12/08 17:37:21
そりゃTranslateされないからだべ

364 名前:デフォルトの名無しさん :04/12/08 18:36:19
>>359
質問の意味が良くわからん。
WTSEnumerateProcessesとLookupAccountSidの使い方が分からんという意味なのか?

365 名前:デフォルトの名無しさん :04/12/08 18:49:02
>>364
WTSEnumerateProcessesとLookupAccountSidを使って目的は果たせたのですが、
この方法はNTではできないので、NTでもできて欲しいのです。

NTサーバでも動くものもあるのですが、
Windows NT4.0 Terminal Server Edition SP4でないと動かないみたいなので。

無視されるかと思ってたのですがレスありがとう。

366 名前:デフォルトの名無しさん :04/12/08 19:45:36
ちょっと興味があったんだが、>>302の質問って誰も答えられないのか?


367 名前:デフォルトの名無しさん :04/12/08 19:50:08
うん

368 名前:デフォルトの名無しさん :04/12/08 19:51:25
>366
このスレのレベルじゃ当然。

369 名前:デフォルトの名無しさん :04/12/08 20:25:06
>>341
sendのあとで、すぐにrecvすんなよ。
select使えよ。

370 名前:デフォルトの名無しさん :04/12/08 20:35:27
>>302
漏れは全然この辺知らないので、基本的なところの確認。
・ImpersonatLoggedOnUser はサーバOSでしかサポートされていない。
・CSRSS.EXE は、SeDebugPrivilege privilege が無いとHookできない。
・SetWindowsHookEx は User32.dll とリンクしていないプロセスや、システムサービスをHookできない。

なんとなく上の2つが引っかかってるような気が・・・

371 名前:デフォルトの名無しさん :04/12/08 20:39:22
>369
理由は?

372 名前:デフォルトの名無しさん :04/12/08 21:00:13
固まるからじゃねーの?真意は知らんが。

373 名前:デフォルトの名無しさん :04/12/08 21:02:49
http://www.codeproject.com/system/logonsessions.asp

374 名前:デフォルトの名無しさん :04/12/08 22:17:20
2つのビットマップを異なるパレットで表示したいのですが、
どうしたらよいでしょうか?

パレットをあらかじめ2つCreatePalette()で作っておいて、

SelectPalette(hDC, hPalette1, FALSE);
RealizePalette(hDC);
SetDIBitsToDevice(); /* 1つめのビットマップ */

UnrealizeObject(hPalette1);
SelectPalette(hDC, hPalette2, FALSE);
RealizePalette(hDC);
SetDIBitsToDevice(); /* 1つめのビットマップ */

ではだめでしょうか?

375 名前:デフォルトの名無しさん :04/12/08 22:26:03
>>374
やってみたら?

376 名前:デフォルトの名無しさん :04/12/08 23:03:49
>>289
デスクトップの数だけスレッドを作ってSetThreadDesktopすればいい

377 名前:デフォルトの名無しさん :04/12/08 23:24:05
>>374
パレット弄ってもビデオモードによっては意味無いんじゃないの?

378 名前:デフォルトの名無しさん :04/12/08 23:27:36
>>374
SetDIBitsToDevice に渡している Bitmapinfo に色情報が入っていればちゃんと出るはず。

379 名前:デフォルトの名無しさん :04/12/09 02:23:54
モーダルダイアログボックスのタイトルバーの文字をGetWindowText関数で取得して
それをSendMessage関数でメインウィンドウに送ってるのですが
なぜかモーダルダイアログボックスのタイトル文字が変化してしまいます。

 GetWindowText(mod,buf,300);
 SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)buf);

modがダイアログボックスです。原因を教えてくださいお願いします

380 名前:デフォルトの名無しさん :04/12/09 02:25:53
>>379
 SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)TEXT("タイトル"));
でも、モーダルダイアログの方が変わるのか?
hwndの値は間違ってないか?

381 名前:379 :04/12/09 02:28:26
>>380
いまためしたのですがダイアログの方が変わります。値とはなんでしょうか?変数名は間違ってません

382 名前:379 :04/12/09 02:37:23
ちなみにこれを記述してる場所はダイアログボックスのプロシージャの中です

383 名前:デフォルトの名無しさん :04/12/09 02:39:11
だからさ、hwndの値がダイアログのものになってるんだろ?

384 名前:デフォルトの名無しさん :04/12/09 02:40:00
なんでしょうかじゃねえだろ値をもたない変数などねーんだよ

385 名前:379 :04/12/09 02:43:05
なるほど、知りませんでした。では値を変える方法を教えてください。お願いします

386 名前:デフォルトの名無しさん :04/12/09 02:45:52
すれ違い

387 名前:379 :04/12/09 02:47:20
>>386
(゚Д゚)ハァ?、いきなりスレ違いはねぇだろカス。

では引き続き値を変える方法を教えてください。お願いします

388 名前:デフォルトの名無しさん :04/12/09 03:09:04
君には無理

389 名前:379 :04/12/09 03:14:50
わからない方の低脳なレスはいりませんので
引き続き値を変える方法を教えてください。お願いします

390 名前:デフォルトの名無しさん :04/12/09 03:53:05
>379
念じろ。念じるんだ。値が変わるまでこのスレくんな。

391 名前:379 :04/12/09 03:56:47
調べてみるとウィンドウハンドルの値はすべて同一の値をとっている
ようなのでIDとして有効なのはそのウィンドウが存在する間だけのようです。
どうやら、みなさん低脳なようなので自分で模索することにします

392 名前:デフォルトの名無しさん :04/12/09 04:00:10
>>391
ここの人は丁脳なので、あなたの言ってる事が理解できませんでした。
レスを強制終了します。

393 名前:デフォルトの名無しさん :04/12/09 05:20:46
変数を知らないでプログラム組めるなんて凄い。

394 名前:379 :04/12/09 05:28:35
>>393
( ゚,_ゝ゚)真性の馬鹿はとっとと死ねよww

395 名前:デフォルトの名無しさん :04/12/09 07:03:31
だからさ、hwndの値がダイアログのものになってるんだろ?

396 名前:デフォルトの名無しさん :04/12/09 07:20:13
いままでダメな奴いろいろ見てきたけど
変数の値の変え方聞く奴は始めて見た。

397 名前:デフォルトの名無しさん :04/12/09 07:25:29
>396
お前分かるの?

398 名前:デフォルトの名無しさん :04/12/09 07:27:07
みんな釣られすぎ

399 名前:デフォルトの名無しさん :04/12/09 07:28:17
>>379
hwndにメインウィンドウのハンドルを代入(変数の値を変える)してください。
それで解決です。

400 名前:399 :04/12/09 07:31:03
>399
代入ってどうやるんですか?

401 名前:379 :04/12/09 07:31:35
すいません。>400は399じゃなくて379でした。
ご迷惑おかけして本当に申し訳ありません。

402 名前:379 :04/12/09 07:41:10
>>396
言ってる意味全然わかってないでしょボクちゃん?ww
変数の値とかじゃないの。わかる?w

403 名前:379 :04/12/09 07:46:18
>>399
( ゚,_ゝ゚)おめーもとっとと死ねよww

404 名前:379 :04/12/09 08:40:41
解決しました。マジですいませんでした。数々の暴言と無礼をどうかお許しください

405 名前:デフォルトの名無しさん :04/12/09 08:45:03
許すわけないだろ

406 名前:359 :04/12/09 10:26:35
>>404
許してほしいと思うなら、なんで解決したか言ってから帰れよ。

>>372
それは逆だス。recvしないから固まるはず。
全部recvし終えてから、sendしないと固まる可能性あり。


ところで漏れの質問はやっぱり無理ッス化。

407 名前:デフォルトの名無しさん :04/12/09 12:00:59
EXEやDLLを作り出すアプリを作るために必要な情報ご存知ありませんか?

408 名前:デフォルトの名無しさん :04/12/09 12:15:37
PEフォーマットの話か?

409 名前:デフォルトの名無しさん :04/12/09 12:37:31
コンパイラ作るのか?
それともジェネレータ(だっけ?)作るのか?
同じ挙動で数値(色とか大きさとか)だけ変えるなら、バイナリ操作だけでいけるだろ

410 名前:407 :04/12/09 12:56:37
>>408,409 アドバイスありがとうございます。説明不足ですみませんでした。
ActiveScriptで制御可能なエンジン部があってそれを単一のEXEなりDLLにしたいと
思っているのですが、その後いろいろ調べてみて、以下の方法で行けそうな気が
するのですがいかがなものでしょう?それはダメだとか、普通はこうするだろなど突っ込み
いただけるとありがたいです。

1 .ダミーのリソース(スクリプトやそれが必要なリソースをパッケージしたもの)を含んだ
EXEあるいはDLLのファイルをあらかじめ用意しておく。
2. BeginUpdateResource、UpdateResource、EndUpdateResourceを使って、それを
書き換えるて、新しいEXEあるいはDLLのファイルを作成する。
3. 作ったEXEあるいはDLLのファイルの実行時、FindResource、LoadResource、LockResource
を使ってリソースからスクリプトなどを取得して実行。

411 名前:デフォルトの名無しさん :04/12/09 12:59:23
>>406
だって、そんなAPIはないから。

412 名前:デフォルトの名無しさん :04/12/09 13:06:52
>>410
exeファイルに関しては単純にランタイムのexeの後ろにゴミ(スクリプト)くっつけただけってのはよく見る

413 名前:359 :04/12/09 13:07:31
>>411
ありがとう(涙

414 名前:デフォルトの名無しさん :04/12/09 14:08:04
>>413
WMIのWin32_Processクラス辺りじゃダメかな

ローカルマシンでしかやったことないけど、
WMI自体はリモートマシンにも対応してるはず・・・

415 名前:407 :04/12/09 15:46:50
リソースに組み込む方法、単純にEXEの後ろに追加する方法、両方で実現できました。
ありがとうございます

416 名前:デフォルトの名無しさん :04/12/09 16:56:18
メインウィンドウをオーナーウィンドウとしたダイアログボックスで
ダイアログボックスを最小化してからメインウィンドウを最小化し
再びメインウィンドウを元にもどすとダイアログボックスも元に戻ってしまいます。
なぜでしょうか?原因を教えてくださいお願いします

417 名前:デフォルトの名無しさん :04/12/09 17:44:15
HSPでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
HSPの基礎からすべてを叩き込んでくれませんか??
お願いします。

418 名前:デフォルトの名無しさん :04/12/09 17:51:38
>>417
http://pc5.2ch.net/test/read.cgi/gamedev/1082902759/

419 名前:デフォルトの名無しさん :04/12/09 17:52:05
1 :HSP :04/04/25 23:19 ID:FQRAx6j0
HSPでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
HSPの基礎からすべてを叩き込んでくれませんか??
お願いします。


2 :名前は開発中のものです。 :04/04/26 00:06 ID:Y28g2c6L
ぐふっ・・・おまえには・・・すべてをおしえた・・・みんなをまもってくれ・・・・・・・・・


3 :名前は開発中のものです。 :04/04/26 02:19 ID:PFEeis3S
ネタスレですか? 釣られませんよ。

420 名前:デフォルトの名無しさん :04/12/09 20:12:39
現在以下の処理をし、ネットワーク共有フォルダのファイルへ
書き込む処理を行っています。

1.WNetAddConnection2
2.ファイル書き込み
3.WNetCancelConnection2

書き込むPCが起動しているときは、問題なく処理できるのですが、
例えばPCの電源が入っていないときは、ネットワークを検索しているのか、
WNetAddConnection2 がエラーを返すのにすごく時間がかかってしまいます。

対策として、秒数を指定しタイムアウトしたいのですが、
設定する方法はあるのでしょうか?


421 名前:デフォルトの名無しさん :04/12/09 20:40:20
>>378
アドバイスありがとうございます。

Bitmapinfoの色情報がちゃんと入っていませんでした。
(まだ修正して試してませんが)

これから試してみます…

422 名前:デフォルトの名無しさん :04/12/09 22:25:43
DLL内の関数からCreateThread APIでスレッドを起動するプログラムを
書いているのですが、グローバル変数に保存したはずの値の一部が
消えてしまいます。

まず、以下のような構造体を定義し、グローバル変数としてこの
構造体のインスタンスを1つ用意しました。

// パラメータ
struct TEST_PARAM
{
  const char *aaa;
  const char *bbb;
  int ccc;
  const char *ddd;
  const char *eee;
  int fff;
  int ggg;
  const char *hhh;
  const char *iii;
};

// パラメータ
TEST_PARAM *g_pTestParam = new TEST_PARAM();


423 名前:422 :04/12/09 22:28:45
外部プログラムからはExecTestという関数が呼ばれるようになっており、
この引数にTEST_PARAMへのポインタを受け取っています。
これをグローバル変数pTestParamに保存した後、CreateThread API
でスレッドを起動しています。

// 外部から呼ばれる関数
void _stdcall ExecTest(TEST_PARAM *pTestParam)
{
  DWORD dwTestThreadId;

  // パラメータを保存
  *g_pTestParam = *pTestParam;

  // テストスレッドを起動
  g_hTestThread =
    CreateThread(NULL, 0, TestThread, NULL, NULL, &dwTestThreadId);
}

// テストスレッド
DWORD WINAPI TestThread(LPVOID lpParam)
{
// ★★★この位置でg_pTestParamのメンバを参照すると、一部の文字列メンバが
// ★★★空っぽになっている。

  // 履歴検索実行スレッド終了
  ExitThread(0);

  // 履歴検索実行スレッド用ハンドル解放
  CloseHandle(g_hTestThread);
}


424 名前:422 :04/12/09 22:31:00
ExecTest内でパラメータを保存した直後にg_pTestParamのメンバを
参照すると全て正しい値が入っていたので保存できたかに見えた
のですが、TestThread内の★★★の位置でg_pTestParamのメンバを
参照すると、一部の文字列メンバが空っぽになっていました。

そもそも*g_pTestParam = *pTestParam; という書き方がまずいのでしょうか。
メンバは整数とポインタだけなのでOKかなと思ったのですが。
おかしいところがありましたらご教授お願いします。

425 名前:422 :04/12/09 22:32:17
すいません。訂正します。

誤)グローバル変数pTestParam
正)グローバル変数g_pTestParam

426 名前:デフォルトの名無しさん :04/12/09 22:49:20
>>422
aaa とかの指してる中身もコピーして保存しておけ。
strdup とか使う場合には _beginthreadex を使え。
Cライブラリを一切使わないならCreateProcess で良いけど。

427 名前:422 :04/12/09 22:57:17
>426
ありがとうございます。やってみます。

428 名前:422 :04/12/09 23:04:05
お騒がせしました。動きました!ありがとうございました。

429 名前:デフォルトの名無しさん :04/12/10 09:50:34
現在のOSのバージョン・SPの適用状況はGetVersionExで取得できますが、
ほかにインストールされているOSやCD-ROMのバージョン・SPの適用状況を取得するには
どのようにしたらよいでしょうか?

430 名前:デフォルトの名無しさん :04/12/10 10:05:13
CD-ROMのバージョン?

431 名前:デフォルトの名無しさん :04/12/10 11:01:19
現在起動してるOSではなく、ドライブ上にただ存在しているだけのOSの
種類やバージョンを知りたいって事?

432 名前:デフォルトの名無しさん :04/12/10 11:14:54
ext2やext3(その他色々)も読まなきゃならんのか?

433 名前:デフォルトの名無しさん :04/12/10 11:15:52
VMwareとかがインストールされていて
その中にOSがあったらそのバージョンを
知りたいんです。


434 名前:デフォルトの名無しさん :04/12/10 11:33:01
( ´_ゝ`)フーン

435 名前:デフォルトの名無しさん :04/12/10 11:34:37
何にせよ、「Win32API」の範疇の話では無いな。

436 名前:デフォルトの名無しさん :04/12/10 11:55:42
よくしらんがVMwareってディスクイメージをWindows上の単一ファイルとして
イメージ作ってたりすんじゃないの?
そうでないものはひたすらファイル読みまくってDLLのバージョンリソースでも
チェックしたら?

437 名前:429 :04/12/10 14:51:41
すいません、OSというのはWindowsのことで、CD-ROMとはインストールCDのことです。
IEは特定のファイルからバージョンを取得できるのですが、
Windowsそのものについてはそのような方法を見つけられませんでした。
GetVersionEXも何らかのファイルのバージョンを返していると思うのですが、わかる方いませんか?

438 名前:デフォルトの名無しさん :04/12/10 15:19:12
version.dllとか?

439 名前:デフォルトの名無しさん :04/12/10 16:00:51
>>437
MSIとかそっち方面?

440 名前:69式フリーPG ◆hND3Lufios :04/12/10 18:59:32
>>437
これのことかいな。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/versions.asp

ちょっと文章が分かりにくい。>>429を読んで、
「OSのバージョンやSPをAPI以外に、ファイルのバージョン等から取得する方法は
ありませんか?」という意味に解釈するのは無理があるぞな。

441 名前:デフォルトの名無しさん :04/12/10 19:00:17
Windowsのバージョンって、プロンプトでverって打ったら出てくる文字列でOKか?
取得する関数があったり、レジストリからチェック出来たり、色々方法があった気がするけど

442 名前:デフォルトの名無しさん :04/12/10 19:05:46
>>441
OKじゃないよ。

443 名前:デフォルトの名無しさん :04/12/10 20:51:09
CDのディスクラベルじゃないのか?

444 名前:デフォルトの名無しさん :04/12/10 20:51:41
↑ボリュームラベル

445 名前:デフォルトの名無しさん :04/12/10 21:04:05
細かいこと言い出すと DLL のサイズだの CRC あたりまでチェックせにゃならんなw

446 名前:429 :04/12/11 00:19:38
またまたすいません。
>>429ではAPIがあるかもと思って書いたのですが、
レスを見てなさそうだったので>>437で言い直しました。

>>438
>>440
ありがとうございます。でもSPの取得までは無理そうですね・・・

>>439
MSIというのがよくわかりませんが、たぶん違うと思います。

>>441
それならGetVersionExでできるのですが・・・

>>443
ボリュームラベルならGetVolumeInformationで取得できてます。

スレ違いになってきたので逝ってきます。スレ汚しすいません。

447 名前:デフォルトの名無しさん :04/12/11 04:16:18
カレントディレクトリを移動する方法を教えてください。

448 名前:デフォルトの名無しさん :04/12/11 04:23:19
>>446
サービスパックとかの情報か。レジストリに検索かけてみたら、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP
に、サービスパックとホットフィックス情報があるっぽい

449 名前:デフォルトの名無しさん :04/12/11 11:06:24
>>447
_chdir()
ワイド文字版がよければ
_wchdir()

450 名前:デフォルトの名無しさん :04/12/11 11:23:29
>>447
SetCurrentDirectory() もよろしく

451 名前:デフォルトの名無しさん :04/12/11 11:49:54
日本語を含む文字列の中から日本語を検索するときは
strstrじゃなくて_mbsstrじゃないとまずい?

452 名前:デフォルトの名無しさん :04/12/11 12:10:07
まずい
strstrでは予期せぬ物がヒットする可能性がある。

453 名前:デフォルトの名無しさん :04/12/11 12:11:04
せっかくだから _tcsstr にしたほうが。

454 名前:デフォルトの名無しさん :04/12/11 12:25:35
>>416を教えてください。お願いします

455 名前:69式フリーPG ◆hND3Lufios :04/12/11 12:30:02
Shell APIのStrStrではどうだろう。
(IE4以降が必要になるけど)

456 名前:デフォルトの名無しさん :04/12/11 12:30:18
>452
そうなんですか。どういう場合にNGになるんでしょうか。

457 名前:デフォルトの名無しさん :04/12/11 12:44:06
2バイト文字を含む場合

458 名前:69式フリーPG ◆hND3Lufios :04/12/11 12:45:05
char *p = strstr("予約", "\\");

459 名前:69式フリーPG ◆hND3Lufios :04/12/11 12:46:47
あ、日本語を検索する時の話か。スマソ。>>458は忘れて。

460 名前:デフォルトの名無しさん :04/12/11 13:00:39
>457
試しに "aaaaaaあいうえおbbbbb" の中から "あいうえお" を
検索してみたら問題なかったのですが、例えば特定の文字コードを
含む文字が含まれているときはうまくいかないことがある、
みたいなことなんでしょうか。

461 名前:デフォルトの名無しさん :04/12/11 13:20:50
>>460
char *p = strstr("例文", "癜");
たとえばこんなのがヒットしてしまう。

462 名前:461 :04/12/11 13:21:58
おっと補足。
>>461は文字コードがShift_JISの場合だからな。

463 名前:デフォルトの名無しさん :04/12/11 13:23:20
>461
おお、ありがとうございます。文字コードで見ると
97 E1 95 B6 から
E1 95 を
探すからヒットしちゃうってことですね。

464 名前:デフォルトの名無しさん :04/12/11 13:24:37
>463
この辺の問題が_mbsstrにすれば解決するんですかね。
ちなみに>453さんの_tcsstrはどういうときに使うのでしょうか。

465 名前:477 :04/12/11 13:28:26
>449>450
ありがとうございました。

466 名前:69式フリーPG ◆hND3Lufios :04/12/11 14:21:30
>>464
_tcsstrだと、_MBCSが定義されていれば_mbsstrに_UNICODEが定義されていれば
wcsstrにプリプロセッサが置換する。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_generic.2d.text_mappings_in_tchar..h.asp

467 名前:デフォルトの名無しさん :04/12/11 16:33:15
そういえば、Win32プログラムを作ってて
カレントディレクトリを気にすることってあまりないよね。

468 名前:デフォルトの名無しさん :04/12/11 17:24:41
>>467
カレントディレクトリをリネームとか
削除しようとすると問題になるよ

469 名前:デフォルトの名無しさん :04/12/11 17:26:11
>468
>467が言っているのはそういうことじゃないと思う。

470 名前:デフォルトの名無しさん :04/12/11 17:58:11
>>468
そもそもそんなどんなときにそんな事態が発生するというのか

471 名前:デフォルトの名無しさん :04/12/11 18:19:49
フルパスで指定しなければ、ファイルを開くのもディレクトリを操作するのも
カレントディレクトリを対象にするんじゃないか?

472 名前:デフォルトの名無しさん :04/12/11 18:22:14
>>416 >>454
自信ないけど、たぶん仕様だと思うよ。
俺も昔、同じ現象に悩まされたことがあって、結局オーナーをNULLにすることで解決したような…

473 名前:デフォルトの名無しさん :04/12/11 18:28:52
>>471
そうだよ。でもたいていフルパスで指定するよねって話だと思う。

474 名前:デフォルトの名無しさん :04/12/11 18:41:13
フルパスじゃないと基準がないしな。
一度ファイルオープンダイアログ開いた時点でカレントはそのフォルダにチェンジされちゃうしな。

ところでアプリケーションがある位置をアプリ起動時にカレントのフルパスを保存することで
とっといてるけどこれってまずい?

475 名前:デフォルトの名無しさん :04/12/11 18:58:09
Win32プログラムというかGUIプログラムってことなんだろう。きっと。
Win32だったとしてもコンソールアプリは普通カレントディレクトリを基準にするっしょ

476 名前:デフォルトの名無しさん :04/12/11 19:08:12
>>474
まずい

477 名前:デフォルトの名無しさん :04/12/11 19:19:20
>476
なんで?

478 名前:デフォルトの名無しさん :04/12/11 19:43:38
ダイアログはレジストリを見てる
カレントではない

479 名前:デフォルトの名無しさん :04/12/11 19:57:11
>>477
アプリが存在するディレクトリとカレントディレクトリは一致しないから。

簡単に試せる方法としては、アプリのショートカットファイルをつくって
そのプロパティで作業フォルダを変更してみること。

480 名前:デフォルトの名無しさん :04/12/11 19:59:40
>479
なるほど

481 名前:デフォルトの名無しさん :04/12/11 20:20:34
>>479
じゃあ、アプリケーションの位置ってどうやって特定すればいいですか?

482 名前:デフォルトの名無しさん :04/12/11 20:37:25
>>481
GetModuleFileName(NULL, filename, length)

483 名前:デフォルトの名無しさん :04/12/11 20:47:31
>482
さすが!

484 名前:481 :04/12/11 20:53:39
>>482
おお!
ありがとうございます!

485 名前:デフォルトの名無しさん :04/12/11 22:39:40
>474etc
それって恥ずかしくないか?

486 名前:デフォルトの名無しさん :04/12/11 23:05:03
BOOL GetOpenFileName(LPOPENFILENAME lpofn);
みたいに、ポインタをダイアログに渡して、そのポインタ先にデータを取得するダイアログってどうやって作ってるんですか?
int DialogBox(HINSTANCE hInstance , LPCTSTR lpTemplate ,HWND hWndParent , DLGPROC lpDialogFunc);
には、ポインタを渡せるような引数は無いのですが…

487 名前:デフォルトの名無しさん :04/12/11 23:08:25
DialogBoxParam()

488 名前:デフォルトの名無しさん :04/12/11 23:15:44
>>486
487 の提案が順当な線だが、
WM_INITDIALOG でオーナーに SendMessage という手もある

489 名前:デフォルトの名無しさん :04/12/11 23:26:28
>>487
おお、こんなのがあったのか。DialogBox使ってどうやるのかずっと考えてた
ありがとうございます。

>>488
モーダルダイアログって、親ウィンドウはキー入力とか受け付けなくなるけど、SendMessageは受け付けるんですか?

自分では、GetWindowLongのGWL_USERDATAとかみたいに、関数使って無理やり保持させる方法とか考えてた…

490 名前:デフォルトの名無しさん :04/12/11 23:28:04
>>489
逆にダイアログから親ウィンドウへSendMessageするっていうこと。

491 名前:デフォルトの名無しさん :04/12/11 23:33:11
>>489
DialogBox() とか DialogBoxParam() は、内部に独自のメッセージループを持っているので、
親ウィンドウのプロシージャもずっとメッセージを受け取れる状態になってるよ。

492 名前:359 :04/12/12 01:22:03
>>414
↓のコードでWMIを使ってやってみたらローカルマシンでは動作しました。

ServerName = "\\Optiplex-Gx1"
Set ServiceSet = GetObject("winmgmts:" & ServerName).ExecQuery("select * from Win32_Process")
for each Service in ServiceSet
  Call Service.GetOwner(strOwner, strDomain)
  WScript.Echo Service.Name & "," & strDomain & "\" & strOwner
Next
Set Service = Nothing
Set ServiceSet = Nothing

これをリモートマシンでも試してみます!
ありがとうございます!

493 名前:デフォルトの名無しさん :04/12/12 02:27:08
>>490
それは分かってたんですが…

>>491
メッセージ自体はOKなんですね。参考になりました。
(たぶん大丈夫だけど、メッセージは一切受け付けないつもりで実装してたんで、特定の動作で不都合が出てきてりするかも…調べてみます…)

494 名前:デフォルトの名無しさん :04/12/12 02:53:02
RasHangupで回線を切断させるのに15秒くらいかかってしまうのですが、
これってもっと時間短縮できないのでしょうかねぇ。
接続元の環境はWinXPマシンにINSボード突っ込んで、ISDN回線使ってます。
接続先はYAMAHAのルータです。

495 名前:デフォルトの名無しさん :04/12/12 05:20:40
それはわざと時間掛かるようになってます。

496 名前:494 :04/12/12 08:53:09
>>495
あー、そうなんですかぁ。残念。
レス、さんくすです。

497 名前:デフォルトの名無しさん :04/12/12 10:23:12
すいません初歩的な質問です。
ネットワークコマンドでnbtstatがありますよね。
このコマンドの中で動いてるAPI関数を知りたいのです。
Pingなどの中身は自力でわかったのですが
どうしてもわかりません。

498 名前:デフォルトの名無しさん :04/12/12 10:41:08
>497
>Pingなどの中身は自力でわかったのですが
すげー。よければ教えてください。

499 名前:デフォルトの名無しさん :04/12/12 11:07:46
>>498
パケットキャプチャーすれば、わかるだろ。

500 名前:69式フリーPG ◆hND3Lufios :04/12/12 11:15:01
IP Helper APIの組み合わせでできるんじゃないかな。
arpもつくれるはず。


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