- 1 名前:デフォルトの名無しさん [2007/04/18(水) 01:54:51 ]
- スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-5くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn.microsoft.com/library/)の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
- 231 名前:デフォルトの名無しさん [2007/04/24(火) 18:01:09 ]
- 複数ウィンドウを作成したい場合は
どうすればいいのでしょうか
- 232 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 18:10:10 ]
- 単数ウィンドウを作るのと同じ手法を複数回繰り返してください。
- 233 名前:デフォルトの名無しさん [2007/04/24(火) 19:36:59 ]
- >>232
なるほど ありがとうございました! (^O^) あと複数の親ウィンドウをIDの用に管理する方法はあるでしょうか
- 234 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 20:23:13 ]
- もどってくるHWNDで判るだろ?
- 235 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 20:55:13 ]
- なんか涙でてきた
- 236 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 02:20:33 ]
- ところで、Win32APIってなんですか?
- 237 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 02:51:51 ]
- なんかいろんなものでてきた
- 238 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 04:55:21 ]
- そういうことして楽しいと思ってるの?
- 239 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 05:04:35 ]
- CreateWindow(TEXT("EDIT") , TEXT("文字") , WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,
248 , 40 , 45 , 22 , hwnd , (HMENU)0 , ((LPCREATESTRUCT)(lp))->hInstance , NULL); このエディットコントロールに表示される“文字”のフォントのサイズを小さくすることは出来るのでしょうか? あと、SendMessage(hEdit, ES_READONLY, 0, 0);みたいな感じで、 目的のエディットコントロールを読み専用に変えたいのですが、↑のだと上手くいきません。 どうすればいいのでしょうか?
- 240 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 05:24:29 ]
- フォント設定はWM_SETFONTかEM_SETFONTSIZE使う
読み専用のES_READONLYのES はEDITSTYLEのことであってメッセージではない EM_SETREADONLYをSendMessageに渡す
- 241 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 07:35:47 ]
- >>240
WM_SETFONTの方は少してこずりましたが、無事出来ました。 ありがとうございました。
- 242 名前:デフォルトの名無しさん [2007/04/25(水) 08:15:08 ]
- ウインドウハンドルをhashtableみたいな構造に突っ込みたいのですが、
一意のキーとすべき値は何を使えばいいでしょうか。 hashtableは文字列をキーとして、値はポインタを渡すようにしています。 put(char* key, void* value)みたいにです。 ウインドウハンドルで一意となる値を文字列としてキーとして使いたいのです。 あとからウインドウハンドルからhashtable経由で値をとりたいからです。 ウインドウハンドルにはunsetという内容が入っているみたいですが、 つかうなと書いてあるWebサイトもあってどうしていいかわかりません。
- 243 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 08:22:01 ]
- 文字列じゃなくてHWNDをキーに使えばいいだろ。
どうしても文字列にしたければHWNDの値自体を文字列に変換するとか、 なんでその程度の知恵が無いんだ?
- 244 名前:242 [2007/04/25(水) 09:19:29 ]
- >>243
回答、ありがとう。 HWNDの値自体とはアドレスのことをいっていますか?unsetの値自体をいっていますか?
- 245 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 09:57:34 ]
- HWNDの値と言ったらHWNDの値だろ、アホかw
- 246 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 10:03:35 ]
- class Hashtable {
put(char* key, void* value); }; HWND hWnd = GetWindow(hogehog); Hashtable h; h.put((char*)hWnd, (void*)GetTitle(hWnd));
- 247 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 10:21:47 ]
- いやいやいや
- 248 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 10:23:16 ]
- キーに文字列しか使えない環境なら、sprintf とかでHWNDの数値を文字列にするとか
- 249 名前:デフォルトの名無しさん [2007/04/25(水) 11:12:27 ]
- GetOpenFileNameでフラグにOFN_ALLOWMULTISELECT|OFN_EXPLORERを指定したとき、
選択したファイルの順序を逆に並べる方法は無いでしょうか? 現状、最後に選択したファイルが先頭に挿入されるようで、 これを最後に付加するようにしたいのです。 (アプリ側で逆にたどることは可能ですが、GetOpenFileName操作時の ファイル名テキストボックスの見た目を前後逆にしたい) 環境はXPSP2です。よろしくお願いします。
- 250 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 13:03:38 ]
- >>249
OFN_ENABLEHOOKでどうにかするしかないんじゃないかなぁ
- 251 名前:242 [2007/04/25(水) 14:22:33 ]
- >>245-246
>>248 HWNDって、winnt.hで以下のように定義されているんですが、 int unusedをもつ構造体へのポインタではないんでしょうか? #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name HWNDを文字列にしたらアドレスが文字列としてとれるんだと思っているんですが、 間違えていますか?
- 252 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 14:45:22 ]
- 壮絶に違う
HWND ポインタの中身(大きさも含む)は謎 つか >>248 でいいじゃん 書かないとわからん? sprintf(buf, "%p", hwnd); とすれば? ってことだ
- 253 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 15:08:02 ]
- デスクトップやコントロールパネルなどの
主要なシェルフォルダを指すGUIDのリストってどこかにないでしょうか?
- 254 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 15:52:11 ]
- >>253
レジストリ
- 255 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 16:12:40 ]
- >>253に便乗だけど
マイコンピュータとかコントロールパネルとかかもしれないpIDLがあるとき CLSIDみたいな::{...}に変換する術ってないすか?
- 256 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 16:38:02 ]
- SHGDN_FORPARSING
- 257 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 16:45:20 ]
- >>250
ありがとうございます。調べてみます。
- 258 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 17:08:15 ]
- サブクラスを使って、エディットコントロール内でEnterキーを押したら
メッセージボックスを出すようにしているのですが、その後、 エディットコントロール内で改行されてしまいます。 Enterを押したときにメッセージボックスだけを出して、 その後改行しないようにするにはどうすればいいのでしょうか?
- 259 名前:242 [2007/04/25(水) 17:17:16 ]
- >>252
つきあってくれてありがとう。 sprintf(buf, "%p", hwnd); ってやるとbufにはhwndのアドレスが入るとおもってるんですが間違いですか? アドレスって再利用されて一意ではない気がするんです。
- 260 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 17:33:12 BE:69876566-2BP(222)]
- >>259
>ってやるとbufにはhwndのアドレスが入るとおもってるんですが間違いですか? 間違いです。何のためのハンドルかと。
- 261 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 17:34:45 ]
- エクスプローラもどきを作っています。
現在、アイコンをGetIconOfで取得しているのですが こいつは該当フォルダの中のアイテムのアイコンしか取得できず、 デスクトップ自身のアイコンを取得することができません。 何か良い方法があれば教えてください。
- 262 名前:228 [2007/04/25(水) 17:35:02 ]
- >229さん、230さん
レスありがとうございました。 頂いた情報で実装出来そうです、ありがとうございます。
- 263 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 17:35:24 ]
- そもそもハンドルはポインタじゃないから、中身を気にしてはならんと思うんだが。
- 264 名前:242 [2007/04/25(水) 18:23:07 ]
- >>260
>>263 考えてみました。 ハンドル=構造体へのポインタと勘違いしていました。 付き合ってくれた方、ありがとう。というか、すんませんでした。
- 265 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 18:28:23 BE:67935757-2BP(222)]
- ハンドルが構造体へのポインタとして実装されていたとしても、わざわざ「ハンドル」
と読んでいるのは何のためなのかと。
- 266 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 18:31:33 ]
- >>258をお願いします・・・m(_ _)m
- 267 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 18:47:48 ]
- >>258
Enterキーを処理した後、EDIT本来のプロシージャに処理回してない?
- 268 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 18:53:30 ]
- >>267
エディットコントロールのプロシージャの最後は return CallWindowProc(DefInProc, hwnd, msg, wp, lp); にしてます。これをどうすればいいのでしょうか・・・ return 0;とかにしてもエディットコントロール自体が消えてしまいます;;
- 269 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:02:14 ]
- >>267
Enterキーの時だけ、プロシージャに処理を渡さないようにすればいい
- 270 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:02:28 ]
- >>268
>Enterキーを処理した後
- 271 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:07:28 ]
- SubclassProc(hwnd, msg, wparam, lparam)
{ switch(msg) { case WM_KEYDOWN: if(wparam == VK_RETURN) { (処理) return; // DefWindowProc()いらない } } } こういうことか?リターンキーの時だけ弾ければいいってこと?
- 272 名前:258 mailto:sage [2007/04/25(水) 19:07:29 ]
- プロシージャはこんな感じになってます。処理の後はreturn 0;にしてますが
やはり改行されてしまいます・・・ LRESULT CALLBACK InProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch(msg) { case WM_KEYDOWN: if(wp==VK_SHIFT){ shift_flag = 1; }else if (wp == VK_RETURN && shift_flag==0) { MessageBox(hwnd, "ENTER", "ENTER", MB_OK); }else if (wp == VK_RETURN && shift_flag==0) { MessageBox(hwnd, "Shift+ENTER", "Shift+ENTER", MB_OK); } return 0; case WM_KEYUP: if(wp==VK_SHIFT){ shift_flag = 0; } return 0; } return CallWindowProc(DefInProc , hwnd , msg , wp , lp); }
- 273 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:15:58 ]
- WM_CHAR
- 274 名前:258 mailto:sage [2007/04/25(水) 19:29:27 ]
- WM_CHARにしてみたら文字の入力すら出来なくなったのですが・・・;;
きっと基本的なことなのでしょうけど、何時間も止まってると泣きたくなってくる・・・
- 275 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:31:19 ]
- そりゃそうだよなぁ。
- 276 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:37:31 ]
- >>258
if文をよ〜く見直してみろEnterキー以外もトラップしてるぞ
- 277 名前:258 mailto:sage [2007/04/25(水) 19:45:58 ]
- >>276
Shiftの事でしょうか?Shift全部はずして、単純にif(wp==VK_RETRUN){}にしても やはり同じ結果になりました。これは一体何がどうあghwrへあぃtjr
- 278 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:47:44 ]
- >>277
トラップしないキーはreturn 0;しないでデフォルトプロシージャに渡すのだ。
- 279 名前:258 mailto:sage [2007/04/25(水) 19:54:15 ]
- >>278
こういう事でしょうか? LRESULT CALLBACK InProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch(msg) { case WM_KEYDOWN: if (wp == VK_RETURN) { MessageBox(hwnd, "ENTER", "ENTER", MB_OK); return 0; } return CallWindowProc(DefInProc , hwnd , msg , wp , lp); }
- 280 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:55:15 ]
- >>279
それをWM_CHARでやる
- 281 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 20:00:15 ]
- できました
みなさま本当にありがとうございました
- 282 名前:258 mailto:sage [2007/04/25(水) 20:02:42 ]
- いえ、出来てません。文字の入力すら出来ないのですが・・・
LRESULT CALLBACK InProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch(msg) { case WM_CHAR: if (wp == VK_RETURN) { MessageBox(hwnd, "ENTER", "ENTER", MB_OK); return 0; } return CallWindowProc(DefInProc , hwnd , msg , wp , lp); }
- 283 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 20:10:21 ]
- >>258
メッセージループのところにTranslateMessage(&msg);はあるか? // メッセージループ MSG msg; while(GetMessage(&msg, NULL, NULL, NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); }
- 284 名前:258 mailto:sage [2007/04/25(水) 20:15:53 ]
- 出来ましたあああああああああ;;
caseの終わるところをreturn 0からbreak;に直したら出来ました;; WM_CHARで捕まえて、全部return0にしてたせいで入力されないようになってたみたいです。。。 ありがとうございました
- 285 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 20:25:41 ]
- >>279,282のプロシージャ
{ }の対応がおかしい気がするんだが・・・?
- 286 名前:デフォルトの名無しさん [2007/04/25(水) 21:28:59 ]
- このような関数で、ドライブごとまるまるコピーしたいのですが、
BOOL CopyDirectory(LPCTSTR From, LPCTSTR To) { SHFILEOPSTRUCT TSHFileOpStruct; ZeroMemory(&TSHFileOpStruct,sizeof(SHFILEOPSTRUCT)); MessageBox(NULL, From, To, MB_OK); //構造体の初期設定 TSHFileOpStruct.hwnd = NULL; // 親ウインドウのハンドル TSHFileOpStruct.wFunc = FO_COPY; // フラグ TSHFileOpStruct.pFrom = From + NULL+ NULL; // 対象元パス TSHFileOpStruct.pTo = To + NULL+ NULL; // 対象先パス TSHFileOpStruct.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; //フラグ //実行する if(SHFileOperation(&TSHFileOpStruct) != 0){ return FALSE; } if(TSHFileOpStruct.fAnyOperationsAborted == TRUE){ return FALSE; } return TRUE; } CopyDirectory("H:\\test", "C:\\test") だと成功するのですが CopyDirectory("H:\\", "C:\\test") だと失敗します。 ドライブの中身をまるまるコピーすることはできないのでしょうか? 初歩的な質問かもしれませんが、よろしくお願い致します。
- 287 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 21:44:32 ]
- pFromはあくまでもファイル名を指定するためのバッファらしいので
"H:\\*"みたいにワイルドカードを使うってのはダメ?
- 288 名前:デフォルトの名無しさん [2007/04/25(水) 21:50:56 ]
- >>287
教えていただいた方法で解決できました! 結構長い間ひっかかっていたので、助かりました。 ありがとうございました。
- 289 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:40:16 ]
- GUIアプリからコンソール用のアプリを影で動かし(て、その結果をエディタに送り)たいんですけど
そういうAPIってありますか?
- 290 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:44:12 ]
- はぁ?
- 291 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:44:51 ]
- 無い
はい次
- 292 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:44:55 ]
- あります
- 293 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:51:38 ]
- ありますが、
はい次
- 294 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:52:22 ]
- APIに関係することか、わかりませんがお願いします。
自己解凍書式によくあるような > copy /b hoge.exe + datafile でつくった hoge.exe から datafile の中身を取る プログラムを作りたいのですがやり方を教えて頂けないでしょうか?
- 295 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:53:39 ]
- *** main(char**arg,int argl) ...................................................
- 296 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:59:30 ]
- >>294
「リソース」をキーワードに基本から勉強しなおしなさい
- 297 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:10:47 ]
- copyで連結したものをリソースとして扱えるか?
俺にはイメージヘッダからイメージサイズを見て、 それを元にdataの先頭領域を求める方法になる気がする。 違ったらすまん
- 298 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:13:51 ]
- copy /b hoge.exe + datafile + datafilesize
- 299 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:15:52 ]
- ぐぐってみたらこういう方法だそうです
プログラムに4バイトのリソースを埋め込む。 そのリソースを読み込んでその値だけ、読み飛ばして自分自身を解凍するプログラムを作る。 何らかの手段で4バイトのリソースに自己解凍プログラムのサイズを書き込む。 自己解凍プログラムの後ろに実際のデータを書き込む。
- 300 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:18:20 ]
- かなりコンパイラ依存な質問ですが・・・
FindNextFileがVisual C++ 6.0でちゃんと動くのにGCC(gcc version 3.4.5 (mingw special))でちゃんと動きませんorz www.uploda.net/cgi/uploader4/index.php?file_id=0000012569.zip test_findfile.c ソース test_findfile_gcc.exe GCCでコンパイルしたもの test_findfile_vc6.exe VC++6.0でコンパイルしたもの VC++6.0でコンパイルしたものは、ちゃんと2つ目以降に見つかったファイルを表示します。 しかしGCCでコンパイルしたものは最初の1つ目しか表示しません。 MSDN見ても解決方法わからないし・・・
- 301 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:24:41 ]
- >>289
名前なしパイプを使ってリダイレクト。 CreatePipe, DuplicateHandle, CreateProcess(STARTF_USESTDHANDLESがヒント), PeekNamedPipe, ReadFileなどの関数を使う。 待機関数を使ったプロセスの終了判定と、 PeekNamedPipeとReadFileの順序を巧く管理しないと止まるので注意。 じゃぁ、約束のおっぱいをうpしてね
- 302 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:26:03 ]
- (・) (・)
- 303 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:29:15 ]
- D / ∩___∩ \_WW/
・ ≪ | ノ ヽ ≫ D ≪ V ≪ / ● ● | ≫ ・ ≪ ・ ≪ | ///( _●_)//ミ ≫V ≪ D ≪ 彡、 |∪| 、`\ ≫ ・ ≪ ! ≪ / \ ヽノ /_> / ≫ D ≪ ≪ \| ・ ・ / / ≫ ! ≪ MMM\ | / ̄ /MMM\ | /\ \ | / ) ) ∪ ( \ \_)
- 304 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:30:10 ]
- >>300
ワイルドカード絡みなのかな? 下のコードをそれぞれのコンパイラでコンパイルして 「ちゃんと動かない」ときの引数を与えて比較してみればおk #include <stdio.h> int main(int argc, char *argv[]) { int i; for(i=1;i<argc;i++) printf("argv[%d]=%s\n", i, argv[i]); return 0; }
- 305 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:31:01 ]
- ところでDVDってドメスティックバイオレンスオブダイナミカルなの?
- 306 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:32:05 ]
- >>300
どのディレクトリに対して実行しても結果は同じですか?
- 307 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:35:58 ]
- >>300
OSは?
- 308 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:36:35 ]
- >>300
c:\directory\* c:\\directory\\* じゃねーの?
- 309 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:38:01 ]
- >>300
ワイルドカードが展開されてるんだろ
- 310 名前:デフォルトの名無しさん [2007/04/25(水) 23:41:24 ]
- 見た感じFindNextFileが必ずゼロを返してるような動き。
一個だけ正しく見つけてあとはサヨウナラだな。
- 311 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:43:54 ]
- FindFirstFile に渡される引数の内容(argv[1]) が違うから
表示させてみれば疑問は解決するはず
- 312 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:46:35 ]
- そこで、ダブルクォーテーションですよ
- 313 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 00:24:23 ]
- >>300
GCCに付属してるCRT_noglob.oをリンクすると解決するお 海外での似た質問と解凍: www.cygwin.com/ml/cygwin/1998-11/msg00165.html www.cygwin.com/ml/cygwin/1998-11/msg00235.html
- 314 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 00:48:10 ]
- ぼ・・・僕ハッカー
- 315 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 09:54:11 ]
- WTLでCToolBarCtrlを使ってツールバーを作っています。
manifestを指定してXPスタイルにしているのですが、 そうするとアイコンサイズと比べ、ボタンサイズが大きくなりすぎてしまいます。 どうしても小さくしたいのですが、SetButtonSizeを指定しても無視されてしまい 自動でサイズが決定されてしまいます。 ボタンのサイズを小さくしたいのですが、どうすればできますか。
- 316 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:07:41 ]
- ビットマップを印刷する処理でカラープリンタに出力するとおk、なんですが、
白黒プリンタに印刷すると真っ黒画面(プリンタドライバのメモリ不足でよくおきるヤシ)となります。 Win32APIで、印刷時にビットマップを描くとき、白黒プリンタを意識する指定ってありましたっけ?
- 317 名前:デフォルトの名無しさん [2007/04/26(木) 10:09:59 ]
- ShellExecuteで起動したソフトが起動しきったかどうかを確認する方法を教えてください
- 318 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:14:26 ]
- 起動しきった、の定義は?
メッセージループが回りだしたでいいのかな
- 319 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:28:17 ]
- CreateProcessのほうがいいかもね
- 320 名前:デフォルトの名無しさん [2007/04/26(木) 10:34:52 ]
- >>318
起動してから表示されるまでに時間がかかるソフトがあるので 画面が表示されたらと思っていました。 >>319 ShellExecuteよりShellExecuteExのインスタンスハンドルで何とかなりそうでしょうか?
- 321 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:39:08 ]
- 316もヨロ
- 322 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:43:13 ]
- >>317
FindWindow
- 323 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:44:44 ]
- >>320
ShellExecuteはシェルに命令投げるだけなので実際の起動処理は全部シェルがやる。 だからShellExecuteで起動したプロセスの処理を監視するならフックとかの回り道が必要になるし、 CreateProcessに比べて面倒極まりないから>>319の言うとおり 起動したプロセスの監視をしたいならCreateProcessがよろし。
- 324 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:48:44 ]
- >>316
正解なのかどうなのかわからんが… printerなDCに直接 StretchBlt したときに真っ黒出力されたことがあった。 printer と同じ解像度のメモリDCに一旦StretchBlt して、 そのメモリDCをprinterなDCに BitBlt で回避できた
- 325 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:52:13 ]
- >>317
ShellExecuteExでfMaskにSEE_MASK_NOCLOSEPROCESSを指定すると 起動したプロセスのハンドルがhProcessに返されるので WaitForInputIdleを呼べばいいかと。
- 326 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:55:40 ]
- >>316
GetDeviceCapsで出力APIがサポートされているか調べるとか・・・かな
- 327 名前:デフォルトの名無しさん [2007/04/26(木) 10:57:36 ]
- >>322
予めタイトルとクラス名がわかってればいいんですけどね >>323 CreateProcessですとPROCESS_INFORMATION構造体のhProcessハンドルで 状態をみるとおもうのですが、どのAPIで状態を確認することができるのでしょうか?
- 328 名前:316 mailto:sage [2007/04/26(木) 10:59:45 ]
- サンクス>>324 >>326
そう、その辺りの話ですよね。 自分も、StrechBlt → BitBlt → StretchDrawDIB と変えてきて、 あーこれで解決したーと思ってたんですが、 カラービデオプリンターはおk、白黒ビデオプリンターで真っ黒、見たいな現象。 >GetDeviceCapsで出力APIがサポートされているか調べるとか・・・かな kwsk StrechDrawDIBが動作しないとか???
- 329 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 11:02:13 ]
- 白がちゃんとした白じゃないから黒くなるのでは
StrechBltMode変えたら
- 330 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 11:05:53 ]
- >>328
GetDeviceCapsでRASTERCAPS調べて RC_STRETCHBLTビットが立ってれば、 StreathBltを使って良いとか、そういう話し あと、StretchDrawDIBってMSDNにはないけど・・・? ググっても、自作っぽい関数にしか引っかからないぞw
- 331 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 11:24:47 ]
- >>327
>>325
|

|