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などの質問はそれぞれの言語や開発環境スレで
131 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:12:23 ] >>96 >行開始位置のポインタをとりつつ\r\nを\0\0に書き換えていく これポインタ取るのはわかるけど、書き換えは出来ないんじゃね? バッファってchar*だから一旦配列なり、mallocで取った領域なりに バッファ丸ごとコピーして、そこを書き換えないと
132 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:18:26 ] ファイルマpp(ry
133 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:21:50 ] >>131 constでもリテラルでも無い、普通にメモリ上に動的確保したバッファ内の値が書き換えできないと申すか?w
134 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:25:15 ] >>131 おまえの言ってるバッファはいったい何のバッファだ? ReadFileに渡すようなバッファがWriteAccess不能なメモリ領域だと言うのか?w
135 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:27:54 ] バッファの語源はやっぱ水牛?
136 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:28:26 ] シリアル通信について質問させて下さい。 通信がうまくできません。 以下は流れです。 CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); GetCommState(); DCBパラメータを書き換え SetCommState(); GetCommTimeouts(); タイムアウトパラメータを変更 SetCommTimeouts(); WriteFile(); // 1byteのコマンド送信準備 FlushFileBuffers(); // 送信 ReadFile(); // 1byte受信(受信できるまで10回繰り返し) 0x0Fを送れば、0xF0が返ってくるはずなのですが 何も返ってこなくて。手順的な見落としなどがあれば ご指摘頂けると幸いです。 秋月のTDS01Vというセンサーキットを自前のプログラムで 読んでみようと始めたのですが、最初から躓きました。 センサーの動作は添付のプログラムで正常動作を確認しています。 全てのAPIからはエラーは返ってきていません。
137 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:34:21 ] どんな引数を指定しているかも DCBの設定内容も隠してどこがいけない?と聞かれてもな・・・
138 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:43:23 ] >>137 申し訳ない、行数制限に引っかかったので どこを削ろうかなと。 DCBはGetした後は、キットのドキュメントにある パラメータをセットしてるつもりです。 (他はGet時のまま) m_CommDCB.BaudRate = CBR_9600; // 9600bps m_CommDCB.fBinary = TRUE; // bynary mode:always TRUE m_CommDCB.fParity = FALSE; // parity no check m_CommDCB.ByteSize = 8; // byte size m_CommDCB.Parity = NOPARITY; // no parity m_CommDCB.StopBits = ONESTOPBIT;// 1 stop bit タイムアウトはWeb上でみつかったサンプルの値を引っ張って 来ています。 m_CommTimeouts.ReadIntervalTimeout = 100; m_CommTimeouts.ReadTotalTimeoutMultiplier = 10; m_CommTimeouts.ReadTotalTimeoutConstant = 500; m_CommTimeouts.WriteTotalTimeoutMultiplier = 10; m_CommTimeouts.WriteTotalTimeoutConstant = 500; bRtn = WriteFile( m_hCommHandle, m_pTxBuff, 1, &dwCount, NULL ); FlushFileBuffers( m_hCommHandle ); dwCount = 0; for ( int i = 0; i < 10 && dwCount == 0; i++ ) { bRtn = ReadFile( m_hCommHandle, m_pRxBuff, 1, &dwCount, NULL ); // 戻り値チェックしながらリトライループ } ここで、for文が10回回って出てきてしまいます。dwCountは0のまま
139 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:52:46 ] bRtnは確認したの?
140 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:56:33 ] >>139 レスありがとうです。 上のソースは抽出でして、全てのAPIの戻り値は チェックしていて、エラーが返ってきていないことは 確認しています。
141 名前:デフォルトの名無しさん [2007/04/21(土) 00:51:40 ] >>140 はCOMポートを増設してクロスケーブルを買ってくるべきだな。 で、ケーブルで首ry
142 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 15:04:40 ] タブコントロールをEnableWindow()で無効にしても、 タブの文字が淡色表示にならないのだがそういう仕様?
143 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 15:09:15 ] そう
144 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:45:17 ] GRAYEDにしなさい?
145 名前:デフォルトの名無しさん [2007/04/21(土) 19:34:52 ] >>141 ワロタw まさに泣いて馬超を斬るを地でいった訳かw
146 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 20:07:28 ] CreateWindowのEDITで、文字を入力してENTERを押したときに動作を設定したいのですが、 どうすればいいのでしょうか?EDITにフォーカスがないときには出来るのですが、 EDITにフォーカスがあるときは改行されてしまいます。
147 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 20:16:09 ] サブクラス化
148 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 20:26:13 ] >>146 エディットコントロールをマルチラインに設定するのをやめる。
149 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 20:32:12 ] >>148 メッセンジャーみたいな感じで、Shift(Ctrlだったかも)+Enterで改行、 通常のEnterで別の動作みたいな感じにしたいのですが、 マルチライン設定だと無理なのでしょうか?
150 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 20:32:44 ] >>149 >>147 それが理解できないならまだ早いということ
151 名前:デフォルトの名無しさん [2007/04/22(日) 00:31:32 ] XP Homeでファイルのアクセスをプログラム側で検出することは出来ますか? Proならファイルの監査が利用できるですが。
152 名前:デフォルトの名無しさん [2007/04/22(日) 02:03:44 ] >>151 おまえのエクスプローラーはどうなってる?それが答えだ。
153 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 02:21:35 ] フォルダの変更は監視できたと思うけど。
154 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 02:22:31 ] >>151 理屈から考えて出来るはず。
155 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 06:10:46 ] 逆にpro側の監査機能が良くわからないがfilemonのようなことしたいのかな?
156 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 10:12:32 ] ReadDirectoryChangesW FILE_NOTIFY_CHANGE_LAST_ACCESS 監視中のディレクトリ、またはサブツリーで前回のファイルアクセス日時が変更されると、 変更通知の待機操作から制御が返ります。
157 名前:151 mailto:sage [2007/04/22(日) 11:11:30 ] >>152-156 レスありがとうです。 ReadDirectoryChangesWなどでは、なんらかの更新が発生しないとダメな気がします。 (今から確認します) 簡単に試してみると、メモ帳でテキストファイルを開いても"アクセス日時"が変わらないような。。。
158 名前:151 mailto:sage [2007/04/22(日) 11:14:24 ] 連投申し訳ないです。 >>155 そうですね。filemonの簡易版(最低限アクセスがあったことをトリガーにしたい)のです。
159 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 11:17:44 ] 監査かけてイベントビューアからゲット
160 名前:デフォルトの名無しさん [2007/04/22(日) 11:20:19 ] 仮想リストビューでカラム幅を調整する方法を教えてください。 リストビューは詳細表示。ダイアログは使わずにCreateWindowで作ってます。 普通のリストビューを使っていたときはヘッダとデータを全部作り終わった後に カラム数分 ListView_SetColumnWidth(ハンドル, インデックス, LVSCW_AUTOSIZE) をしていました。 仮想リストビューに変更してLVN_GETDISPINFOのときに ListView_SetColumnWidth(ハンドル, pDispInfo->item.iSubItem, LVSCW_AUTOSIZE); をやったら固まりました。 環境:VC6, SDK
161 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 11:20:59 ] >>159 最初はそうしようと思ったんだけど、XP homeって監査がないんです。
162 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 11:39:44 ] >>160 LVSCW_AUTOSIZEするためにはその列の一番長い文字列の幅が必要だから そのときにLVN_GETDISPINFOが呼ばれて無限ループになってるんじゃね?
163 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 11:55:51 ] ファイルアクセスをHOOK
164 名前:160 mailto:sage [2007/04/22(日) 12:02:08 ] LVSCW_AUTOSIZEは使えなさそうですね。 他のタイミングで幅調整するしかないか。
165 名前:151 [2007/04/22(日) 12:09:48 ] >>163 えっと、それはSetWindowsHookExを利用したHOOK機能のお話しでしょうか。 調べ切れていないかもしれませんが、ファイルアクセスに関するものは見つかりませんでした。 それとも ruffnex.oc.to/kenji/text/api_hook/ のような、概念的なフックの話で、代替DLLを用意して 起動しているプロセス全てのエントリポイントを塗り替えるお話でしょうか。
166 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:23:31 ] explorer.exeだけならCreateProcess系のフックで何とかなると思うけど Windows全体ってことになるとカーネルモードのお仕事になる気がする CreateProcessにしても思いつきで言ってるうえ、あまりにもスマートじゃないが
167 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:31:53 ] って ファイルに触る=>CreateProcess=>ファイルパスの取得 が100%成り立つって前提じゃないとだからたぶん無理か スマソ
168 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:39:27 ] 何らかの変更が加えられたときだけでいいならFindFirstChangeNotificationなどが使えるような気がする
169 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:42:40 ] >>168 >>157-158 を見てそういう話が出てくるか普通w で、その上で、ファイルの監視なんて変更が加えられた時でいいと思うんだがな 開かれたからって、なんかあるか?
170 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:47:20 ] >>142 だけど、どなたか淡色表示する方法教えてください。 なるべく簡単な方法で具体的だと助かります。
171 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 13:37:59 ] オーナードロー
172 名前:151 mailto:sage [2007/04/22(日) 13:47:32 ] >>169 特定ファイルへのアクセスのロギングがしたいのです。。。 やっぱり難しそうですね。
173 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 14:09:59 ] >>151 Home EditionでもUIがないだけで監査の機能自体は存在する。 したがってこのスレ的な回答は「Audit Policy関数を駆使して何とかしろ」 msdn2.microsoft.com/en-us/library/aa375742.aspx
174 名前:151 mailto:sage [2007/04/22(日) 14:30:52 ] >>173 >UIがないだけで監査の機能自体は存在する そうだったんだ! 無知でした。 解決できそうです。ありがとうございます!
175 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 14:31:06 ] ロードランナー
176 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 14:59:39 ] 初期のNTからある物をわざわざ外すわけないじゃん
177 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 15:02:18 ] ですよねー^^
178 名前:151 mailto:sage [2007/04/22(日) 15:46:42 ] うーん、LoadLibraryでadvapi32.dllを取り込んで GetProcAddressしてAuditFreeとかAuditSetSystemPolicyを見つけようとしても null返してくる。 GetLastErrorは"指定したプロシージャが見つからない(127)"でした。 >>173 のページの説明でもclientは"Requires Windows Vista."ってなっていて やっぱりXP homeでは駄目なんでしょうか。。。
179 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 17:14:55 ] >>178 すまん、Vistaでしか確認してなかった。XP以前だとこのあたり使うのかな AddAuditAccessAce (WinNT 3.1) AddAuditAccessAceEx (Win2k) AddAuditAccessObjectAce (Win2k)
180 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 17:40:38 ] >>179 ご丁寧にありがとうございます! GetProcAddressで確認できました。今からヘルプ読みます。
181 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 19:19:45 ] >>180 > GetProcAddressで確認できました。 DependencyWalkerで確認したほうが手っ取り早くね?
182 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 19:43:28 ] >>181 VCならな
183 名前:デフォルトの名無しさん [2007/04/22(日) 19:47:55 ] [Ctrl]+[A]とかをシミュレートしたいのですがどうやるんでしょうか? SendMessage(hWnd, WM_KEYDOWN, VK_CONTROL, 0); SendMessage(hWnd, WM_KEYDOWN, 'V', 0);
184 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 19:56:43 ] >>183 SendInputかkeybd_event
185 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 19:57:57 ] >>182 VCである必要はないと思うが
186 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:00:42 ] VC買わないと手に入らないと思ってるんじゃね? Platform SDKに付いてる。
187 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:05:15 ] PSDKについてくるし ttp://www.dependencywalker.com/ で単独で配布しとるぞ。
188 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:07:35 ] 知らんヤツの方が多いんじゃね?
189 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:16:56 ] ウィンドーを作らないプログラムの場合 タスクバーの右端にアイコンを追加することは出来ますか?
190 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:25:10 ] >>183 WM_KEYDOWNはSendMessageで送っては駄目。 PostMessageを使う必要がある。 詳しいことは、PostMessageとSendMessageの違いと TranslateMessageの働きを勉強してくれ。
191 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:41:47 ] >>189 出来る。ただしメッセージは受け取れない。
192 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:42:55 ] >>189 確かできると思うけど、非表示のウィンドウでいいから用意しとかないとイベントを受け取れんぞ。
193 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:44:05 ] >>189 非表示でウインドウを作ればいいだろ。 知恵が足りない。
194 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 22:52:21 ] かぶりすぎ
195 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:11:09 ] 98、Me、XPで動いて欲しいソフトを作っているんですけど、 始めにGetVersionExのdwMajorVersionが 10、90、1かであるかチェックすれば大丈夫でしょうか。 dwMajorVersionが同じでもdwPlatformIdが違うとかはないでしょうか。
196 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:18:50 ] OSVERSIONINFO msdn2.microsoft.com/en-us/library/ms724834.aspx
197 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:19:33 ] > dwMajorVersionが > 10、90、1かであるかチェックすれば大丈夫でしょうか Windows の Version 90 か… >>195 は未来を進んでるなぁー それはそうと↓を良く見れ。 msdn2.microsoft.com/en-us/library/ms724834.aspx
198 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:20:50 ] リロードしたらほんとうにかぶりすぎてて吹いた
199 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:21:29 ] >>195 user32.dll,kernel32.dllあたりのリンクの仕方次第では、 そんなんチェックする前にDLLのバージョン不整合で落ちるぞ。
200 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:29:03 ] 別次元の話だけど、俺ならまずWINVERと_WIN32_WINDOWSを0x0410にする。 それはともかく、2003/Vista及びそれ以降で動かせるようにするつもりはないのか? まあ、そのつもりがなくても互換性モードをオンにすれば動かされるだろうが。
201 名前:195 mailto:sage [2007/04/22(日) 23:39:48 ] ありがとうございます。 >>196 日本語のは見ていたんですけど、さっぱりだったもので。 >>197 90の使い方間違っていますか?下位をチェックするとかですかね。 飛びぬけて数字が大きいので違和感はあったんですけど。 >>199 VC2005で作られたソフトを実行すると、始めに**dllが 見つからないとか出て、実行できないのがありますがそれですかね。 それなら危険がない?と思うので逆にいいんですけど。 >>200 PCを持っているなら、もちろん動かせるようにしたいんですけど、 98、Me、XPしかないので、チェックのしようがないです。
202 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:48:37 ] >>201 > 始めに**dllが そりゃSxSだろ。manifestをちゃんと書いてやれば見つけてくれる。
203 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:51:01 ] >>201 いや、動作確認しなくても「保障はしないよ」くらいは言えるでしょ。 GetVersionInfoExの結果が想定していないバージョンだったら一律に実行を拒否する、なんて コードを書いているのでもない限り。
204 名前:195 mailto:sage [2007/04/23(月) 00:08:27 ] >>202 それとは違いましたか。 そちらについても勉強したいと思います。 >>203 さすがに、「98、Me、XP以外なので実行できません」 と出て終了は良くないですかね・・。 よくMSDNに9x系では○○、NT系では○○と、 分かれても2パターンである事が多いので、 それがMajor4、5であると考えると、 他のOSでもそれなりに動いてくれる気もします。 有名どころで、LoadImageはNT系でファイルから開けないとか、 タイマーの精度で9x系は55ミリ秒とかありますが、 そういうのは性能が落ちる方に合わせては作っています。
205 名前:デフォルトの名無しさん [2007/04/23(月) 00:23:14 ] ステータスバーの右下についてる SIZEGRIPのみ表示させるってできますか?
206 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:31:13 ] >>205 SCROLLBAR SBS_SIZEGRIP あたりでググってみ
207 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:34:27 ] >>204 想定より新しいバージョンのOSは、基本的に受け入れるチェックコードでないと駄目、 って昔のMSDNで見た記憶がある。 特殊なアプリで無ければ、マニュアルに動作保障OS列挙しとけば チェックコード自体要らないけどな。
208 名前:デフォルトの名無しさん [2007/04/23(月) 00:34:45 ] わかりました! ありがとう
209 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:39:18 ] > LoadImageはNT系でファイルから開けない 本当?MSDNには何も書いていないけど msdn2.microsoft.com/en-us/library/ms648045.aspx
210 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 01:03:56 ] ググってみたけどよく分からん。 NT4.0初期の頃に問題があってSPで修正された、ってことかなあ。 少なくとも2000以降なら問題無いはず。
211 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 01:52:19 ] DialogBoxで呼び出すCALLBACK関数に引数としてポインタを渡したいのですが 出来ますでしょうか?
212 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 01:57:03 ] >>211 DialogBoxParamを使え
213 名前:211 mailto:sage [2007/04/23(月) 02:02:13 ] >>212 こんな時間にサンクス ちょっとやってみる
214 名前:195 mailto:sage [2007/04/23(月) 05:00:50 ] >>207 なるほど、分かりました。 >>209 >>210 何年か前はLR_LOADFROMFILEはNT系では使えない となってたと思うんですけど、仰るとおり修正されたんだと思います。
215 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 07:06:13 ] >>214 その記述があったのははNT 3.51しか想定してなかったころのすごく古いMSDNライブラリ 英語版はすぐに直ったけど日本語版では長いこと説明が残ったままだった 実際にはちゃんと開ける
216 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 08:04:58 ] Win2000な俺のPCでもLR_LOADFROMFILEできてるからな
217 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 08:08:39 ] UNICODEで書かれている文字列を、strstrで操作した場合、不具合は起きますか? (strcatならlstrcatのようにUNICODEに対応する関数があるのですが、strstrには lstrstrが無いようなのです)
218 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 08:45:50 ] strsafe.h で追加された文字列操作関数について ir9.jp/prog/ayu/strsafe.htm
219 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 09:15:34 ] わかりました! ありがとう
220 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 09:24:43 ] >>218 UNICODE対応のstrstrが載っていないようなんですけども、strsafe.hの中の関数を使って 自分で作成するのでしょうか??
221 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 10:02:21 ] API関係ないな
222 名前:217 mailto:sage [2007/04/23(月) 10:33:37 ] 自己解決(?) ぐぐったらUNICODE←→ANSI変換APIが出て来た・・・ なんか面倒な事に・・・
223 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 10:36:52 ] win32apiじゃなくていいなら、wcsstr とかなかったっけ?
224 名前:デフォルトの名無しさん [2007/04/23(月) 11:35:15 ] RECT wndrc; wndrc.top = 0; wndrc.bottom = 100; wndrc.left = 0; wndrc.right = 100; int x = wndrc.left; int y = wndrc.top; int w = wndrc.right - wndrc.left; int h = wndrc.bottom - wndrc.top; hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, x, y, w, h, NULL, NULL, hInstance, NULL); if (!hWnd) return FALSE; RECT rc; if( ::GetWindowRect( hWnd, &rc ) ) { if( rc.top == wndrc.top && rc.left == wndrc.left && rc.bottom == wndrc.bottom && rc.right == wndrc.right ) {} else { ::MessageBox( 0, "ウィンドウサイズが違います", "?", 0 ); } } VC.net2003のwin32のデフォルトで作られるプログラムで CreateWindowの所を上記の様に変更しました。 そしたら自分の想定していた rc.riight == 100 と反して rc.right == 112 になっていました。 何故ウィンドウの幅がcreatewindowで指定した値と12も違うんでしょうか? ちなみにウィンドウプロシージャ等は一切変更していません。
225 名前:デフォルトの名無しさん [2007/04/23(月) 13:56:40 ] >>183 なるほど。 Postの方で正しく送れました。 ありがとうございました。 >>>>184 SendInputでちょっと下の様に 「A」を入力しるプログラムを書いて実行してみました。 全角入力がONになるみたいなんですが、最後の「変換」の決定(Enterですよね?)の所まで 自動化したい場合はどうすればいいのでしょう? 下のプログラムだと、決定という意味でのEnterは認識されないみたいです… INPUT inputKey[3]; inputKey[0].type = INPUT_KEYBOARD; inputKey[0].ki.wVk = 0; inputKey[0].ki.wScan = 'A'; inputKey[0].ki.dwFlags = KEYEVENTF_UNICODE; inputKey[0].ki.dwExtraInfo = 0; inputKey[0].ki.time = 0; inputKey[1].type = INPUT_KEYBOARD; inputKey[1].ki.wVk = VK_RETURN; inputKey[1].ki.wScan = MapVirtualKey(VK_RETURN, 0); inputKey[1].ki.dwFlags = 0; inputKey[1].ki.dwExtraInfo = 0; inputKey[1].ki.time = 0; inputKey[2] = inputKey[1]; inputKey[2].ki.dwFlags = KEYEVENTF_KEYUP; SendInput(3, inputKey, sizeof(INPUT));
226 名前:デフォルトの名無しさん [2007/04/23(月) 18:01:42 ] スクロールバーのサイズを、画面のプロパティで設定した値ではなくアプリ側で 任意に設定する方法はありませんか? 後、Vistaのスクロールバーのデフォルト値を教えてください。
227 名前:224 mailto:sage [2007/04/23(月) 19:15:41 ] タイトルバーが100に収まりきらなかったのが原因ですた。スマソ。
228 名前:デフォルトの名無しさん [2007/04/24(火) 15:48:40 ] Vistaのように右端に表示領域を確保して、その分デスクトップの作業領域を小さくしたいんですけど、どのように実装したらイイでしょうか。 (他のソフトのウィンドウ表示を最大化にしても、右端に確保した領域にかぶらないようにしたい) 以上です、よろしくお願いいたします。
229 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 16:37:32 ] AppBarのことか? SHAppBarMessageでググってみ
230 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 16:38:05 ] >>228 OSが分からないと何とも言えないけど、Application Desktop Toolbarsじゃ駄目?
231 名前:デフォルトの名無しさん [2007/04/24(火) 18:01:09 ] 複数ウィンドウを作成したい場合は どうすればいいのでしょうか