Win32API質問箱 Build ..
116:デフォルトの名無しさん
07/11/15 11:56:30
rundll32.exe zipfldr.dll,RouteTheCall %zipfile%
これか?ためしてないけど
117:デフォルトの名無しさん
07/11/15 12:05:42
CLSIDFromString("CompressedFolder",&clsid);
CoCreateInstance(clsid,NULL,CLSCTX_ALL,IID_IStorage,(LPVOID*)&pStorage);
pStorage->QueryInterface<IPersistFile>(&pPersistFile);
pPersistFile->Load("zipファイル名",STGM_READWRITE|STGM_SHARE_EXCLUSIVE);
てな感じ、足りないとこは脳内補完よろ
あとはIStorageとIStreamの操作で中身読める。
書き込みは試したことないけど・・・、たぶん似たような手順でいけるとおもふ
118:デフォルトの名無しさん
07/11/15 12:10:27
それって
rundll32.exe unzip32.dll,UnZipCommandLine "%1"
と同レベルな気が
119:デフォルトの名無しさん
07/11/15 12:12:31
リロードしてなかった
>>118は>>116へのレス
>CLSIDFromString("CompressedFolder",&clsid);
これって将来的に大丈夫なのかな?
そんなモン気にするなってツッコミは無しで
120:デフォルトの名無しさん
07/11/15 12:21:32
質問です。
SetWindowsHookEx でグローバルフック登録しているのですが、runas 等で別のユーザで起動したウィンドウへのメッセージがフックできないようです。
普通の (同じユーザ) ウィンドウへのメッセージはフックできています。
何か方法はありますか?
121:デフォルトの名無しさん
07/11/15 12:23:56
別ユーザのウィンドウがフック出来たらセキュリティホール以外の何物でもないだろう
ImpersonateLoggedOnUserとか使えばどうにかなるかも知れんが
122:デフォルトの名無しさん
07/11/15 12:27:09
自分も昇格する
123:120
07/11/15 13:06:13
>>121 そういわれればそうですねぇ。
まあ、今回のは特殊用途なので権限は気にしなくていいのですが・・・
ImpersonateLoggedOnUser 知らなかったので調べます。
124:110
07/11/15 15:11:57
c++は使えないから、comとか無しで頼む
普通にapi関数を一本呼び出し(ループでも)で使えないの?
125:デフォルトの名無しさん
07/11/15 15:14:11
無理だっつうの
126:デフォルトの名無しさん
07/11/15 15:15:27
もう自分でdeflate書け
127:デフォルトの名無しさん
07/11/15 15:18:37
>>124
例えCでもCOMは使えるぞ
いったい何を言ってるんだ?
128:デフォルトの名無しさん
07/11/15 15:20:07
>>124
unzip32使え
嫌なら.net使え
いずれにせよスレ違いだからもう来なくていいよ
129:デフォルトの名無しさん
07/11/15 15:20:30
(124は)CでCOMが使えない
130:デフォルトの名無しさん
07/11/15 15:25:45
124では無いがCでCOMなんて面倒すぎるだろ
第1引数省略できねーしスマートポインタ使えねーしlpVtblとか一々書いてられるか
131:デフォルトの名無しさん
07/11/15 15:28:31
で、だから何?
132:デフォルトの名無しさん
07/11/15 15:30:40
124みたいな奴がCでCOMなんかに手を出すとリークしまくりの糞プログラムにしかならんだろうという事だ
133:デフォルトの名無しさん
07/11/15 15:35:16
なるほど
134:デフォルトの名無しさん
07/11/15 22:58:01
>>110
一般公開されていないよ、MSのZIP解凍/圧縮は。
APIもCOMも。
135:デフォルトの名無しさん
07/11/16 00:04:43
このスレでいいのかどうか悩んだんですが
『Advenced Windows』を読む上で、Win32APIやOSの知識は前提になっているのでしょうか?
C/C++は一通りやったけどWindowsプログラムは未経験という段階の人間が、
>>1にある言葉を借りると「APIフックなど高度な事」が最終目標だという場合、
先に『プログラミングWindwos』などを読んでおくべきなのかどうかと思いまして。
136:デフォルトの名無しさん
07/11/16 00:27:30
URLリンク(www.kumei.ne.jp)
上記のプログラムでCreateWindowExにてウィンドウスタイルを
WS_OVERLAPPEDWINDOW としているのを
WS_POPUP に置き換えるとウインドウが表示されなくなってしまうのですがどうしてでしょうか?
枠線が消えるのはわかりますが、表示されていたはずのピットマップまで消えてしまうので
納得できませんでした。
よろしくお願いします。
137:デフォルトの名無しさん
07/11/16 00:31:11
基礎的なAPIの知識は必要。
最終的にAdvenced Windowsを買う「べき」なのは間違いないと思うけど入門には向かない。
4倍ぐらいの量と金額のEffectiveC++ or STLを入門として買うようなもの。
個人的には APIで学ぶWindows徹底理解 ちゅうのが激しくオススメ
138:デフォルトの名無しさん
07/11/16 00:31:46
どこでエラーが出てるか調べろ
139:デフォルトの名無しさん
07/11/16 00:33:44
沢山のソースコードを読むほうがためになると思う。
140:デフォルトの名無しさん
07/11/16 00:53:01
>>139に同意
141:デフォルトの名無しさん
07/11/16 01:07:23
>>137-139
アンカーつけて喋れw
142:デフォルトの名無しさん
07/11/16 01:18:33
はい
143:デフォルトの名無しさん
07/11/16 01:42:04
いいえ
144:デフォルトの名無しさん
07/11/16 01:47:24
はいえ
145:デフォルトの名無しさん
07/11/16 02:14:27
ないあるよ
146:135
07/11/16 02:17:40
>>137
分かりやすい解説、ありがとうございました。
おすすめいただいた書籍、目次見てたらおもしろそうなので、
是非目を通してみたいと思います。
147:デフォルトの名無しさん
07/11/16 05:04:23
>>136
CW_USEDEFAULTはWS_OVERLAPPEDでないと効果がない。
WS_POPUPだと単にサイズゼロのウィンドウが画面外に作成されてしまう
148:デフォルトの名無しさん
07/11/16 11:22:25
TextOutで表示させる文字のフォントを変更したいのですが、
どのようにすればいいのでしょうか?
149:デフォルトの名無しさん
07/11/16 11:35:57
SelectObject
150:デフォルトの名無しさん
07/11/16 11:58:39
もっといえばCreateFont→SelectObject
151:デフォルトの名無しさん
07/11/16 12:04:38
スレ違いの場合は誘導をお願いします。
今、生DVDにデータを書き込むプログラムを作っています。理想は、時系列で増え続けるデータを
direct recordingすることです。
ところがまず、Windows 2003 DDK添付のspti.cでWRITE DATA BUFFER operationがエラーコード2で
失敗する所ではまっています。
そもそも生DVDに対しては、spti.cでは書き込みは行えないのでしょうか?
152:デフォルトの名無しさん
07/11/16 13:33:13
_beginthreadex関数で、void*型の引数で文字列を渡したいんですけど
_beginthreadex(NULL, 0, mythread, (void*)str, 0, (unsigned int*)&thID);
でスレッド作成をして、スレッド内で
char buf[256];
strcpy(buf, str);
としていますが、上手く引数を受け取れません。
表示させてみると「フフフ…」となります。
strの部分を&strとしたり、色々試してみたのですが上手くいきません。
おとなしくグローバル変数で値を渡したほうがよいのでしょうか…。
153:デフォルトの名無しさん
07/11/16 13:41:33
呼び出している側の領域が、相手のスレッドが動作する前に消失しているんだろ。
馬鹿がよくやる。
154:デフォルトの名無しさん
07/11/16 16:55:25
よくわからないけど、とりあえずはキャストしないといけないんじゃない?
155:デフォルトの名無しさん
07/11/16 17:28:39
>>152
複数作成したりどうしてもグローバル変数使いたくないなら
動的に確保してやればいい
ローカル変数のアドレスを渡すなんて問題外
156:デフォルトの名無しさん
07/11/16 18:43:29
プログラミングに慣れてないならスレッドなんかに手を出すのはやめとけよ
ネット上のサンプルでも排他制御やアトミックオペレーションしてない、いい加減なソースが多いしな
157:136
07/11/16 20:11:06
>>147
また一つ賢くなれました。
ありがとうございました。
158:デフォルトの名無しさん
07/11/17 08:31:31
助けて下さい。
次の物を作らなければなりません。
URLリンク(hp.jpdo.com)
図形は、単純なのですが、作り方が分かりません・・・
アドバイス・参考文献 宜しくお願いします。
出来れば優しい神降臨求む
159:158
07/11/17 08:39:59
URLリンク(i-bbs.sijex.net)
上の画像は、出ないのでコチラ?
160:158
07/11/17 08:46:25
画像は、サンプルです。実際は単純な○△◇等です。
言語は、Vidual c++ 6.0以降
ダイヤログから出発、ボタンを押すと各図形を表示
宜しくお願いします
161:デフォルトの名無しさん
07/11/17 08:53:38
何が分かっていて、何がわからないの?
CあるいはC++はわかるならプログラミングWindowsでも読め。
162:158
07/11/17 09:16:18
ダイアログからダイアログの飛ばし方が分からないです。
とばすのに必要なのは?
ダイアログでも図形は、書けるものなのか?
それに必要なのは?
とりあえずこの2点の知識お願いします。
163:デフォルトの名無しさん
07/11/17 09:30:39
>ダイアログからダイアログの飛ばし方が分からないです。
ダイアログを親ウィンドウにしてダイアログを生成する
>とばすのに必要なのは?
お前のプログラミング知識
>ダイアログでも図形は、書けるものなのか?
描ける (書けるって何だよ)
>それに必要なのは?
お前のプログラミング知識
164:デフォルトの名無しさん
07/11/17 09:44:40
宿題か
>ダイアログからダイアログの飛ばし方が分からないです。
>とばすのに必要なのは?
DialogBox
URLリンク(msdn.microsoft.com)
これだとダイアログリソースが必要になる
CreateWindowExでも書けると言えば書ける
URLリンク(www.sm.rim.or.jp)
こちらは普通にウィンドウを作るのでリソースは必要ない
>ダイアログでも図形は、書けるものなのか?
>それに必要なのは?
例示された奴をとりあえず書けって言われたら
BeginPaint、EndPaint、GetStockObject、FillRect、LineTo、MoveToEx、SetPixel辺りで書くかな
訳分からなければWin32 API入門の30章あたりまで読め
165:デフォルトの名無しさん
07/11/17 10:49:57
やさしいインタネッツだな
166:デフォルトの名無しさん
07/11/17 11:03:22
ダイアログにその画像貼っとけ
167:158
07/11/17 11:36:02
>>164様 他
有難う御座います・・・
読んだけど、分け分から無いです。
取りあえず”Win32 API入門”を買って読みます。
必死なので、また来ます。
それでは、宜しくお願いします。
168:デフォルトの名無しさん
07/11/17 11:36:50
つーかMFCだろスレ違い
169:デフォルトの名無しさん
07/11/17 11:43:41
>>167
Win32 API入門って「サイト名」なんだけどね
>>168
少なくとも164に上がってんのはほぼ全部API
170:デフォルトの名無しさん
07/11/17 12:05:01
リソースとして埋め込んだビットマップを
普通にファイルからビットマップ読み込んだ時のように
CreateDIBSectionする方法って無いでしょうか?
リソースとして埋め込んだビットマップで
アルファブレンド等をしたいのでピクセル列が欲しいんです、W98SEです
171:デフォルトの名無しさん
07/11/17 12:10:19
とりあえず、LoadImageにLR_CREATEDIBSECTION使っとけばいいんじゃね?
暇なら、FindResourceから始める、という手もあるけど。
172:デフォルトの名無しさん
07/11/17 12:29:05
今時98SEかよ
173:デフォルトの名無しさん
07/11/17 12:30:55
>>171
どうもありがとう、両方試してみます
174:デフォルトの名無しさん
07/11/17 12:38:48
アクティブなウインドウのファイル名を取得するコードを書いてます。
ネットではぴったりのコードがなく、つなぎ合わせで
なんとかこんな感じでまとめたのですが、よくわからない
のもあって、うまく動きません。
環境はBCB WinXPです。
/*
//URLリンク(m--takahashi.com)
1) GetWindowThreadProcessId() で HWND から ProcessID を得る
2) OpenProcess() で ProcessID から hProcess を得る
3) EnumProcessModules() で hProcess から hModule を得る
4) hProcess / hModule を使って GetModuleFileNameEx() でヤッター!!
*/
DWORD dwPID;
DWORD dwProcessID = GetWindowThreadProcessId(GetForegroundWindow(), &dwPID);
DWORD ProcessIDs[1000]; /* プロセスIDの一覧 */
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcessID);
DWORD ReturnSize; /* プロセスID一覧の取得結果のサイズ */
EnumProcesses(dwProcessID, sizeof(dwProcessID), &ReturnSize);//この行は?
if(handle)
{
HMODULE hMod;
DWORD size;
char fname[MAX_PATH];
EnumProcessModules(handle, &hMod, sizeof(hMod) ,&size);
GetModuleFileNameEx(handle, hMod, fname, sizeof(fname));
CloseHandle(handle);
ShowMessage(fname);
}
175:デフォルトの名無しさん
07/11/17 12:45:03
GetWindowThreadProcessIdの返り値はスレッドID
176:デフォルトの名無しさん
07/11/17 12:45:50
途中で送信しちまった
GetWindowThreadProcessIdの返り値はスレッドIDなのに
OpenProcessにスレッドID渡してるぞハゲ
177:デフォルトの名無しさん
07/11/17 12:48:17
EnumProcessesの第一引数
178:デフォルトの名無しさん
07/11/17 12:49:33
そもそもEnumProcessesいらないだろこの場合
HWNDからProcessID取るって言ってんだから
179:デフォルトの名無しさん
07/11/17 12:59:47
なんかもうアレ
180:デフォルトの名無しさん
07/11/17 13:12:37
DWORD dwPID;
DWORD dwProcessID = GetWindowThreadProcessId(GetForegroundWindow(), &dwPID);
噴いたwww
181:デフォルトの名無しさん
07/11/17 14:47:18
wiodwsXP
visual studio .net
にてwindowアプリケーションを作っておりますが、
Heap corruption detected at 038A9008(最後の数字は毎回変わる)
のような文章が「出力」の欄に出て警告もなしに勝手に終了します。
ググッた結果、どうやら領域確保あたりが怪しいらしく
mallocやfree関数を調べましたが、おかしな点は見当たりませんでした。
他にどこらへんが怪しいと思いますか?
182:デフォルトの名無しさん
07/11/17 14:49:22
mallocやfree周辺
183:デフォルトの名無しさん
07/11/17 15:00:56
使ってるOSがおかしいよ
184:デフォルトの名無しさん
07/11/17 15:06:36
ヒープオーバーランだろ
185:デフォルトの名無しさん
07/11/17 15:09:28
>>181
プログラムのどこかで、メモリの確保した範囲外に書き込みをして、ヒープを破壊しまったんだ
プログラムのどの部分がどこに影響を与えるとかほとんど予測できないから、
問題が出なくなるまで怪しい場所をひとつずつコメントアウトして原因を絞っていくしかない
186:デフォルトの名無しさん
07/11/17 15:18:37
初心者は文字列用のバッファが怪しい
終端NULLが良くオーバーランしてる
187:デフォルトの名無しさん
07/11/17 15:22:52
ヌル文字はNULと書くようにしようぜ
188:デフォルトの名無しさん
07/11/17 15:23:45
>>181
>>181の頭が怪しい
189:デフォルトの名無しさん
07/11/17 16:20:32
APIスレに来てmallocとかfreeとか言ってるのが気に入らない
HeapAlloc使えよ
とかいう冗談はさておきWin32API関係ない。C初心者スレいってソースすべてうpすれば早く片付くかもね
190:デフォルトの名無しさん
07/11/17 16:34:58
>>185
ありがとう。めんどくさそうだけど頑張ります。
>>186
参考にしてみます。ありがとうございます。
191:デフォルトの名無しさん
07/11/17 17:17:43
>>171のFindResource()のほうから調べながら試していたんですが
(BITMAPFILEHEADER)LockResource()
(BITMAPINFO)LockResource()
とヘッダとインフォのメモリへのポインタを取得して
インフォからCreateDIBSection()でHBITMAPを作成する所まではできたんですが
DIBSectionのほうで使用するメモリに
読み込んだリソースの方のメモリをコピーする所で躓きました
LockResource()でピクセル列の先頭ポインタを取得するために
どういうキャストをすれば良いのかが分からないので困っています
思いつくことを試しながらCopyMemory()しましたがどれも強制終了してしまいます
192:デフォルトの名無しさん
07/11/17 17:38:41
windows XP
VC++ 2003
SetWindowRgnでウィンドウスタイルが変わらないようにするには
どうすればいいですか?
SetWindowRgnしなければXPスタイルなのに、関数を呼ぶと
コマンドプロンプトと同様のスタイル(クラシック?)になります
ウィンドウはVC++2003のWin32プロジェクトで新規作成した
雛形そのままです
193:デフォルトの名無しさん
07/11/17 18:11:14
ANSIビルドのプログラムで、ウィンドウ内に作成したエディットコントロールに
ユーザーによって入力されたテキストを取得して、それをUNICODE形式のファイルに保存しようとしています。
処理の流れとして、エディットコントロール内のテキストの長さ(バイト単位)を取得して
→ 動的にメモリ確保
→ WideChatToMultiByteでUNICODE文字列に変換
→ WriteFile でファイルの先頭2バイトにBOMを書き込み
→ 変換後の文字列をWriteFile ファイルに書き込む
こういう風にしています。
ただ、エディットコントロール内のテキストの長さを取得する段階でつまづいてしまって。。
なんだか、2バイト文字が正確に数えられていないようなんです。
エディットコントロール内のテキストが、「こんにちはwindows」のようになっていた場合。
この文字列「こんにちはwindows」のサイズ(バイト数)を正確に掴むためにはどうすればいいんでしょうか?
ちなみにMFCはわかりません。
194:デフォルトの名無しさん
07/11/17 18:23:31
GetWindowTextLength(のA)でいけるぞ。
comctl32.dllバージョン6使っていたらUTF-16単位での文字数になるかもしれないが、
そのときには、そもそもNT系のはずで、W系APIを直接使って
UNICODE文字列を取得してしまえばいい。
195:193
07/11/17 18:51:26
lstrlen()でも同じ症状になるんですが、
例えば
ANSIビルド版のプログラムでは
lstrlen(TEXT("hello") = 5
lstrlen(TEXT("こんにちは")) = 10
ですが
UNICODE版では
lstrlen(TEXT("hello") = 10
lstrlen(TEXT("こんにちは")) = 10
となります。
確認してみましたが、GetWindowTextLengthでも同じ結果でした。
バイト数は分かりますが、文字数が分からないに思うんですが・・
確かにメモリ確保にはバイト数だけ分かればいいんですが、そもそもGetWindowTextLengthって文字列の長さ(=文字数)
を取得する関数という認識で間違いないですよね?
UNICODE版は、文字数とバイト数(文字数×2)に何の不思議も無いんですが
ANSI版は、文字数とバイト数がバラバラというか。。
ダブルバイト文字とシングルバイト文字が一緒くたでわかりにくいというか・・
196:193
07/11/17 18:56:10
lstrlen(TEXT("hello") = 5
lstrlen(TEXT("こんにちは")) = 5
でした。
うぉー混乱する000
文字列を取得する関数って、
ANSI版だと、文字列のバイト数
UNICODE版だと、文字列の文字数
になってる??みたいですgあ・・
197:デフォルトの名無しさん
07/11/17 19:02:06
ユーザーが手入力するならたいした文字数じゃないだろうから、
単純にバイト数の倍確保しておけばいいんじゃね?
198:デフォルトの名無しさん
07/11/17 19:07:28
キーボードやマウスのボタンを押した時にはウインドウメッセージが出ますが、
ゲームパッドのボタンを押した時にはWMは出ているのでしょうか?
出ていればそのメッセージを教えて頂きたく思います。
60fpsのゲームループの中にゲームパッド情報取得の「〜->GetDeviceState〜」を書くと
まれにエラーが出てしまうため、他の方法を模索しています。
199:デフォルトの名無しさん
07/11/17 19:10:23
>>198
あるわけない
200:193
07/11/17 19:18:51
>>197
うーん。そうなんだけどねぇ。
あとMultiByteToWideCharの最後の引数は文字数を指定しろってなってるから、
これが原因なのかどうか分からないけど、UNICODEファイルとして保存したとき
最後にゴミがつくんです。
一応メモリ確保はGlobalAlloc(GPTR, dwSize)とやってますんで、0で初期化されてるはずなんだけど。。
どこがおかしいのかが分からないという。。。
201:デフォルトの名無しさん
07/11/17 19:58:33
>>191
FindResourceの方は半ば冗談だったのだけどな……
LockResourceで先頭のアドレスが取れるのだから、後はそれを手繰っていくだけ。
中身は通常のビットマップのファイルとほとんど一緒。
ただし、BITMAPFILEHEADER部分が省かれているので、その点には注意。
202:デフォルトの名無しさん
07/11/17 20:11:42
ウィンドウのメニュー部分を透明にすることは出来ますかね?
203:デフォルトの名無しさん
07/11/17 20:12:15
C++で静的な仮想関数を使用する方法 or 参考HPを教えてください。
やりたいことは、_beginthreadexでスレッドクラスを作成して、
子クラスで任意の子メソッドを呼び出すことです。
つまづいている点は、_beginthreadexのコールメソッドが、
Staticなため、子クラスがオーバーライドできなくて困ってます。
ちなみに、以下のHPを参照しましたが、
これよりスマートな方法があれば教えてください!
よろしくです!
C++で遊ぼう「静的仮想関数」編
URLリンク(www.ksky.ne.jp)
204:デフォルトの名無しさん
07/11/17 20:18:16
>>203
「スレッドクラス」「子メソッド」「コールメソッド」「子クラスがオーバーライド」の意味が
わかりません。
エスパーカモン。
205:203
07/11/17 20:23:21
203です。スレッドだと話がややこしいのでサンプル書きました。
以下で、BとCクラスのtest()を呼んだとき、BとCのtest1()を読んでほしいという質問です。
よろしくおねがいします。
#include <iostream>
using namespace std;
class A{
public:
static void test1(void){cout << "A" << endl;}
void test(void){test1();}
};
class B : public A{
public:
static void test1(void){cout << "B" << endl;}
};
class C : public A{
public:
static void test1(void){cout << "C" << endl;}
};
int main(int argc, char *argv[]){
B *bbb = new B();
C *ccc = new C();
bbb->test();
ccc->test();
delete bbb;
delete ccc;
return 0;
}
実行結果:
A
A
206:デフォルトの名無しさん
07/11/17 20:32:34
>>203
やりたいのはこういうことじゃないか?
静的な仮想関数なんてわけのわからないものは必要ない
class A{ public: virtual void test1(){ cout << "A" << endl; }};
class B{ public: virtual void test1(){ cout << "B" << endl; }};
class C{ public: virtual void test1(){ cout << "C" << endl; }};
void thread_main(void *p){
static_cast<A*>(p)->test1();
}
int main(int argc, char **argv){
B *bbb = new B();
C *ccc = new C();
_beginthreadex(NULL, 0, thread_main, bbb, 0, NULL);
_beginthreadex(NULL, 0, thread_main, ccc, 0, NULL);
....
}
207:デフォルトの名無しさん
07/11/17 20:34:14
>>205
static を virtual に変えて終了。
Windows API 関係ないなら C/C++ スレいけば?
208:デフォルトの名無しさん
07/11/17 20:46:05
>>205
thisポインタで自分を取り戻すんだ!
209:203
07/11/17 20:53:03
203です。
>>207,206
_beginthreadexで実行する関数が、GlobalかStaticの制限があるのです。
また、スレッドクラスを継承するクラスは、簡単に使えるようにしたかったのです。
わけあって、MFC等のライブラリを使用できないのです。
>>208
thisを渡す方法も検討したのですが、これも上記Win32APIの理由で・・・
C++すれ逝って来ます。どうもです。
210:デフォルトの名無しさん
07/11/17 20:55:58
>>209
> _beginthreadexで実行する関数が、GlobalかStaticの制限があるのです。
嘘だろ?どこに書いてある?
_beginthreadex のせいでこんなことになってるなら C++ スレに逝っても
迷惑なだけだろう。
211:デフォルトの名無しさん
07/11/17 20:59:00
>>209
>thisを渡す方法も検討したのですが、これも上記Win32APIの理由で・・・
どの理由だよ
thread_mainはグローバル関数なんだから制限の範囲内じゃん
212:デフォルトの名無しさん
07/11/17 21:08:43
>>201
カスタムリソースにも興味があったのでFindの方やってみようかなと思って
アドバイスありがとう、やってみます
213:デフォルトの名無しさん
07/11/17 21:32:25
class A {
public:
virtual unsigned threadProc () = 0;
static unsigned threadProcStatic (void * arglist) {
return ((A *)arglist)->threadProc(); }
void Start () {
_beginthreadex(threadProcStatic, this); // 引数適当 }
};
class B : public A {
public:
virtual unsigned threadProc () { // なんか }
};
こんな感じじゃ駄目なのか? >>209
214:203
07/11/17 22:14:30
203です。Win32APIよくわかってなくてスイマセン。
>>210
_cdeclか_clrcallで渡すことが規約のようです。global or 非staticなメンバ関数を渡せるなら教えてください。
>>211
混乱しててスイマセン。_beginthreadexとthisをどううまく使えば良いのかわかりませんでした。
>>213
ありがとうございます!これで動きました!一度staticな関数を噛まして非staticを呼ぶのですね。
皆様どうもありがとうございました。
215:デフォルトの名無しさん
07/11/17 22:32:28
>>214
>213 は >206 と同じことなわけだが。
216:デフォルトの名無しさん
07/11/17 23:28:01
>>195
>ANSI版は、文字数とバイト数がバラバラというか。。
>ダブルバイト文字とシングルバイト文字が一緒くたでわかりにくいというか・・
それが、可変長であるダブルバイト文字列というもの。
それに嫌気がさしたから、UNICODEは1文字が固定長になっている。
#というはずだったが現実そう上手くは行かず。
>>196
ANSIだとchar型、UNICODEだとwchar_t型でどれだけの要素数を占めるのかと考えればよい。
217:デフォルトの名無しさん
07/11/18 00:01:51
>>215
206は再利用ということを考えてないっぽい
218:デフォルトの名無しさん
07/11/18 00:02:44
このようなのを作りたいんですが、どのような関数を使えばできますか?
URLリンク(www.hsjp.net)
219:デフォルトの名無しさん
07/11/18 00:08:52
CreateListViewMitainaControl()
220:デフォルトの名無しさん
07/11/18 00:10:59
>>214
>>210は間違っている気がするな
221:デフォルトの名無しさん
07/11/18 00:12:32
>>219
ありがとう。そんな便利な関数があるんだね
CreateListViewでググって勉強してくる
222:デフォルトの名無しさん
07/11/18 00:12:37
>>219
Mitainaワロタw
223:デフォルトの名無しさん
07/11/18 07:03:24
>>199
やっぱり無いですか。調べても出てこないわけだ
エラー無くす方向で頑張ってみます
224:デフォルトの名無しさん
07/11/18 08:12:52
>>198-199
無いこともない。joySetCaptureでググれ。
といっても、これを使ったところで全く解決にはならないけどな。
結局自分の代わりにポーリングして監視してくれるだけ。
ゲームパッドはキーボードやマウスのようにmake/breakコードを
送信するいわゆる割り込みデバイスではないから、能動的に
状態の変化を受け取るのは不可能。
225:デフォルトの名無しさん
07/11/18 08:47:25
画面上の任意のテキストを右クリックして、文字列を取得するにはどうしたらよいでしょうか。
Babylon URLリンク(www.babylon.com) のような感じで、Webブラウザに表示されたWebコンテンツでも、
ウィンドウのタイトルの文字列でも、自由にテキストを取得できるようにしたいです。
調べた限りでは、クリックした座標を元にウィンドウハンドルを取得し、該当する文字列を*丸ごと*取得することはできます。
しかし、*クリックした付近の文字列*を取得することが必要なのです。何かよい方法はありますでしょうか。
226:デフォルトの名無しさん
07/11/18 09:09:23
先に言っておくが汎用的な方法は無い
テキストが表示されてるのがEDITクラス(エディットコントロール)なら
EM_GETSELで選択範囲を取れるから
WM_GETTEXTでテキストを取ってから選択範囲を切り出せばいい
ブラウザの場合は表示されてるのはキャプションじゃないのでもっと別の方法が必要になる
具体的には
IWebBrowser2→IHTMLDocument::selection→
HTMLElement::createTextRange→IHTMLTxtRange::findText
って感じで取る
まあ無理だろう
227:デフォルトの名無しさん
07/11/18 09:35:55
Babylonは画面上の「画像」をOCRで読み取ってる
だからIEだろうがFirefoxだろうが、画像中の文字だろうが読み取れる
同等の物を作るのは相当な困難が予想されるが、まぁがんばれw
228:デフォルトの名無しさん
07/11/18 10:32:19
>>227
>Babylonは画面上の「画像」をOCRで読み取ってる
これ、まじ?
("O(ptical)"では無いだろうというツッコミは置いといて、)
ほんとに、画像→文字認識してるの?
229:デフォルトの名無しさん
07/11/18 10:38:13
>>228
Babylonの説明にそう書いてあるだろう
例に出してるものくらいちゃんと調べろよw
230:228
07/11/18 10:48:08
>>229
ごめりんこ
231:デフォルトの名無しさん
07/11/18 11:01:02
どこの誰が書いたかわからんヨタかもしれん話をいちいち調べるかよw
232:158
07/11/18 11:05:38
昨日の158です。再び助けて下さい。
URLリンク(i-bbs.sijex.net)
ダイアログのボタンを押して、メッツセージBoxを表示させました。
これを、異なるダイアログを表示させたいです。
例 URLリンク(i-bbs.sijex.net)
表示させる記述と方法がわかりません。
出来れば具体的な記述をしてくれると有り難いです。
どなたか、ご教授お願いします。
233:158
07/11/18 11:09:45
昨日の記述
>>158
>>159
>>160
助けてくれた神
>>164 他
234:デフォルトの名無しさん
07/11/18 11:12:15
>>231=馬鹿
235:デフォルトの名無しさん
07/11/18 11:18:43
>>232-233
だからMFCはスレチだっつーの
236:デフォルトの名無しさん
07/11/18 11:59:39
>>232
普通にボタンがクリックされたメッセージ処理に、DialogBoxかDialogBoxParamを呼び出せばいいだけじゃないの?
昨日の質問というのは見てないので分からんけど、メッセージボックスだってDLL内でリソース確保して
DialogBoxParam関数を呼び出しているだけのような気がする
モーダルダイアログボックス
237:デフォルトの名無しさん
07/11/18 12:05:44
>>232
ダイアログから複数のモードレスダイアログを開くサンプルを、
C+Win32で書いてみたぞ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
サブダイアログは、管理を楽にするために、
一度作成されると閉じても非表示になるだけの仕様。
宿題のメインはここじゃないのだろうから、こんなもんでいいんじゃね?
238:デフォルトの名無しさん
07/11/18 12:16:12
宿題お願いすると簡単に答えてくれるスレはここですか?
239:デフォルトの名無しさん
07/11/18 12:26:45
宿題スレでやれ
240:158
07/11/18 14:04:35
>>236様
>>237様 他
有難う御座います・・・
けれど、駄目だ Orz 分け分からないです。
void CKadai1119Dlg::Onmaru()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
//MessageBox("○の表示");
DialogBox(hInst, (LPCTSTR)IDD_maru, hWnd, (DLGPROC)About);
}
IDD_maru ダイアログを新たに作成し、取りあえず付けました。
当然エラー
C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'hInst' : 定義されていない識別子です。
C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'hWnd' : 定義されていない識別子です。
C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'About' : 定義されていない識別子です。
241:158
07/11/18 14:08:11
以上のエラーが出ています。
根本的に知識が足りないです。
サンプルプログラムや文献を漁ってみます。
とても、237様に感謝してます。参考にして頑張ります。
242:デフォルトの名無しさん
07/11/18 15:02:06
MFCで無意味にDialogBoxなんてAPIを使おうとする馬鹿初めて見た
>>241
いい加減こっち行けつってるだろ
日本語読めんのか?
■MFC相談室 mfc18d.dll■
スレリンク(tech板)
243:デフォルトの名無しさん
07/11/18 15:02:35
基礎からやれってことだ
横着したって無駄
ここは宿題スレではない
244:デフォルトの名無しさん
07/11/18 16:00:50
俺は、応援してるぞ158w
245:デフォルトの名無しさん
07/11/18 16:07:57
>>244
自演乙
246:デフォルトの名無しさん
07/11/18 16:20:19
__
/__.))ノヽ
.|ミ.l _ ._ i.)
(^'ミ/.´・ .〈・ リ
.しi r、_) | しゃぶらないか?
| `ニニ' /
ノ `ー―i´
/ ̄ '  ̄ヽ
/ ,ィ -っ、 ヽ
| / 、__う人 ・,.y i
| /  ̄ | |
ヽ、__ノ | |
| 。 | /
| ヽ、_ _,ノ 丿
| (つ) |
| / ヽ |
247:デフォルトの名無しさん
07/11/18 16:23:25
>>240
デスクトップwww
248:デフォルトの名無しさん
07/11/18 18:25:09
がんばれ158w
249:デフォルトの名無しさん
07/11/18 18:54:46
エディットボックスを透明にすることは出来ますかね?
250:デフォルトの名無しさん
07/11/18 18:59:10
非表示にすればいい
251:デフォルトの名無しさん
07/11/18 19:11:18
頭いいな
252:デフォルトの名無しさん
07/11/18 19:25:23
間違えました。
透明な背景を持つようにするにはどうしたらいいですかね?
253:デフォルトの名無しさん
07/11/18 19:34:23
レイヤードウィンドウでカラーキーを設定する
254:デフォルトの名無しさん
07/11/18 21:05:18
透明なエディットボックスって何の役に立つの?
255:デフォルトの名無しさん
07/11/18 21:13:38
仕事中に官能小説でも書きたいんジャマイカ?
256:デフォルトの名無しさん
07/11/18 21:19:35
ググッてるんですが、中々難しいです。
>254
機能的にはなんの役にも立ちません。
しかし、描画してあるビットマップがエディットボックスの背景色と重なるのは少し気になります。
257:デフォルトの名無しさん
07/11/18 21:59:08
1. WS_EX_TRANSPARENTを設定する
2. WM_CTLCOLOREDITでNULL_BRUSHを返す
これで透明にならなければEditコントロール自体の問題だからMSに文句言うか諦める
258:デフォルトの名無しさん
07/11/18 23:32:39
.NETでも探しているのですが、Win32APIでも探しています。
Windowsのユーザーアカウントの一覧リストをプログラム上で表示して
そこからアカウントを選択するようなことをする場合、ユーザーアカウントの
リストを得るためのクラスやAPIがあればうれしいのですが、どのようなものがある
でしょうか?
また、そのリストを、Domain上のユーザーアカウントに対しても取得したい
場合にも有効なクラスやAPIであれば尚ありがたいです。何卒よろしくお願いします。
259:デフォルトの名無しさん
07/11/19 00:07:56
static HBRUSH hBrush;
switch (msg) {
case WM_CREATE:
hBrush = CreateSolidBrush(123);
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT", "",
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
100, 10, 200, 25, hWnd, (HMENU)ID_EDIT, hInst, NULL);
SendMessage(hEdit, EM_SETLIMITTEXT, (WPARAM)63, 0);
case WM_CTLCOLOREDIT:
SetBkColor((HDC)wParam, 456);
return ((LRESULT)hBrush);
break;
こうですかね?
260:デフォルトの名無しさん
07/11/19 00:09:20
標準機能では背景を透過させることは出来ない。
以上
261:デフォルトの名無しさん
07/11/19 00:16:47
dllから、そのdllを読み込んだexeにメッセージを渡したいのですが
どちらもウインドウを持たない場合はどのような手段が考えられるでしょうか。
262:デフォルトの名無しさん
07/11/19 00:23:40
メールを送信する
263:デフォルトの名無しさん
07/11/19 01:05:11
メモリマップトファイル
アトム
264:デフォルトの名無しさん
07/11/19 01:26:11
>>261
コールバック関数用意しとけばいいんじゃね?
265:デフォルトの名無しさん
07/11/19 01:55:32
非同期でよければexeからdll呼び出すときに変数のポインタ渡せばいいんじゃない?
コールバックが一番確実だろうけど。
266:デフォルトの名無しさん
07/11/19 02:10:55
>>259
hBrush = CreateSolidBrush(123);
SetBkColor((HDC)wParam, 456);
ナンダコレw
267:デフォルトの名無しさん
07/11/19 07:00:16
Process Explorerでプログラムのsuspendとresumeが可能なんですが
どんなAPIを使ってるんでしょうか?
268:デフォルトの名無しさん
07/11/19 07:18:36
ねいてぃう゛API
269:デフォルトの名無しさん
07/11/19 09:03:22
スレッドを列挙してSuspendThread連打
270:デフォルトの名無しさん
07/11/19 13:18:16
たぶんNtSuspendProcess
調べてもないけど
271:261
07/11/19 14:22:54
>>262-265
レスありがとうございます!
コールバックを実装してみようと思います。
272:デフォルトの名無しさん
07/11/19 17:31:21
リソースからではなく、ファイルからアイコンを取得してイメージリストに
追加したいんですが、どういう方法をとればいけるんでしょうか。
273:デフォルトの名無しさん
07/11/19 17:37:54
LoadLibraryで開いて、LoadIconなりLoadImageなり
274:デフォルトの名無しさん
07/11/19 17:55:20
すいません、dll内のものじゃなくて、iconファイルやbmpからです。
275:デフォルトの名無しさん
07/11/19 18:39:23
LoadImage で LR_LOADFROMFILE
276:デフォルトの名無しさん
07/11/19 19:26:25
>>275
ありがとうございました。
解決しました。
277:デフォルトの名無しさん
07/11/19 20:09:40
透過出来ないのはなぜなんですか?
278:デフォルトの名無しさん
07/11/19 20:11:24
何が?
279:デフォルトの名無しさん
07/11/19 20:15:08
人体
280:デフォルトの名無しさん
07/11/19 20:28:59
人体より衣服を透過したい
281:デフォルトの名無しさん
07/11/19 20:31:50
夜店で売ってるよ
282:デフォルトの名無しさん
07/11/19 20:54:13
>>280
ユーザーモードでは他人の衣服を透過させる事はできない
まずはターゲットに対しての特権取得を行う必要がある
283:デフォルトの名無しさん
07/11/19 21:17:45
>>282
どうあがいても、無理ってことですか?
284:デフォルトの名無しさん
07/11/19 21:39:50
衣服の透過は実装例とか見つからないので詳しくはわからないけど、
管理者権限でも衣服にアタッチできないんなら諦めたほうが素直じゃないか?
285:デフォルトの名無しさん
07/11/19 22:13:16
透過した衣服を着てくれる彼女を作ればいいよ
286:デフォルトの名無しさん
07/11/19 22:22:54
境界線をクリックした時に出る
変な網目のようなバーを描画する関数ってあるんでしょうか?
287:デフォルトの名無しさん
07/11/19 22:27:49
あるといえばあるし、ないと言えばない。
あらゆるプログラムは関数を組み合わせて書く。
288:デフォルトの名無しさん
07/11/19 23:15:04
>>286
DrawFocusRect
289:デフォルトの名無しさん
07/11/20 01:53:40
>>286
白黒のブラシを作って、それで反転させる。
290:デフォルトの名無しさん
07/11/20 06:43:28
1つのアプリでコンソールを複数表示したいのですが、どうすればいいですか?
stderr用とかstdout用とかにわけたいんですが。
291:デフォルトの名無しさん
07/11/20 07:30:24
コンソールは各プロセスに 1 つしか割り当てることができません。
すでにコンソールを持っているプロセスが AllocConsole 関数を呼び出すと失敗します。
FreeConsole 関数を使って現在のコンソールからプロセスを切り離すと、
AllocConsole 関数を呼び出して新しいコンソールを作成することができます。
AllocConsole 関数は、新しいコンソールの標準入力ハンドル、標準出力ハンドル、
標準エラーハンドルを設定することもできます。
標準入力ハンドルはコンソールの入力バッファのハンドル、
標準出力ハンドルと標準エラーハンドルはコンソールの画面バッファのハンドルです。
ハンドルを取得するときは、GetStdHandle 関数を使います。
この関数は主に、グラフィックスアプリケーションでコンソールウィンドウを作成するときに使います。
グラフィックスアプリケーションは、コンソールなしで初期化します。
コンソールアプリケーションは、切り離されたプロセスとして作成する
(CreateProcess 関数を呼び出すときに DETACHED_PROCESS フラグをセットする)
場合を除いて、コンソール付きで初期化するのが普通です。
URLリンク(msdn.microsoft.com)
CreateConsole
AllocConsole
FreeConsole
292:デフォルトの名無しさん
07/11/20 08:25:51
コンソールを持つ子プロセスを複数用意して
CreateProcessの時に親プロセスのstderrやらstdoutをそれぞれのstdinに当ててしまえば可能かも名
293:デフォルトの名無しさん
07/11/20 09:41:19
ブラウザのお気に入りとかのウィンドウのサイズを変える境界線みたいなのってどうやって作るんですか?
境界線を移動できるオプションをウィンドウに設定しても、動くのは一つのウィンドウだけで、
その他のウィンドウはそれに反応してリサイズされないですよね?あの境界線ってどうやって作るのでしょうか?
294:デフォルトの名無しさん
07/11/20 09:47:10
リサイズされるたびに再計算してるだけ
295:デフォルトの名無しさん
07/11/20 10:34:59
>>293
「スプリッタウィンドウ」 で ググれ
296:デフォルトの名無しさん
07/11/20 13:03:37
>>288 >>289
ありがとう、試してみます
297:デフォルトの名無しさん
07/11/20 14:21:09
>>295
ありがとうございます
298:デフォルトの名無しさん
07/11/20 14:24:56
でも画面DCに反転ブラシで書く方法はAeroGlass環境だとクソ重くなるぞ
スプリッタならエクスプローラみたいにダイレクトにサイズ変更するようにしたほうがいい
299:デフォルトの名無しさん
07/11/20 15:48:34
普通はスプリッタウィンドウの中に子ウィンドウを置くだろ
300:デフォルトの名無しさん
07/11/20 20:19:01
スプラッタ?
301:デフォルトの名無しさん
07/11/20 20:52:48
バケラッタ!
302:デフォルトの名無しさん
07/11/20 20:58:28
(/O^)/
303:デフォルトの名無しさん
07/11/20 20:59:44
はらへった
304:デフォルトの名無しさん
07/11/20 23:08:21
hDCはEndPaintで開放されるのでしょうか?
case WM_PAINT:
// クライアント領域を再描画する処理
hDC = BeginPaint(hWnd, &ps);
TextOut(hDC, 0, 0, s, lstrlen(s));
EndPaint(hWnd, &ps);
return 0;
305:デフォルトの名無しさん
07/11/20 23:09:32
そうだよ。PAINTSTRUCTの中にhDCが保持されているので、
そこからEndPaintは解放するデバイスコンテキストを見付ける。
306:デフォルトの名無しさん
07/11/20 23:20:22
なるほど、そういうことだったのですね
デバイスコンテキストはプロシージャを抜けるまでに開放しないと
やばいことになる(どうやばいのかは知りませんが)と聞いていたので
どこで開放してるのか必死になってさがしまつた
307:デフォルトの名無しさん
07/11/21 12:56:48
しかしPAINTSTRUCTの中のhdcと同じもの返すって普通に考えたら謎な実装だな。
文字列系関数で渡したバッファのポインタそのまま返すのと似た感じでコーディング楽にするためなんだろうか。
308:デフォルトの名無しさん
07/11/21 13:54:58
>>307
BeginPaint の動作を勘違いしていると思う・・・
309:デフォルトの名無しさん
07/11/21 14:01:02
そうか?
>>307はpsのメンバにもhdcあるのに、戻り値でも返してるって言ってるだけでは?
310:デフォルトの名無しさん
07/11/21 14:32:29
確かに
別に戻り値は普通にT/Fで良いんだけどな
いいけどさ
311:307
07/11/21 14:37:28
>>308
>>309の通り。
かなりくだらないレベルかもしれんが、PAINTSTRUCTとHDCを両方定義するのが無駄と思って
戻り値は無視(NULLチェックだけ)してPAINTSTRUCTのhdcだけを使うようにしてる。
312:デフォルトの名無しさん
07/11/21 15:24:07
VBのWithのようなものがあったら俺もそうするな。
まあ今でもPAINTSTRUCTの変数名はいつもたった2文字、psだけど。
313:デフォルトの名無しさん
07/11/21 16:42:38
Windows Version 1 の頃の
TextOut(BeginPaint(hWnd, &ps), 0, 0, s, lstrlen(s));
の名残
314:デフォルトの名無しさん
07/11/21 18:43:50
色はつけれるけど、透過ができねぇぇぇえええ!!!
315:デフォルトの名無しさん
07/11/21 18:53:36
つGDI+
316:デフォルトの名無しさん
07/11/21 19:01:43
hdcはWM_PAINTのWPARAMで渡される訳だが
317:デフォルトの名無しさん
07/11/21 19:14:53
>>316
一体いつの時代だ?
URLリンク(msdn2.microsoft.com)
wParam
This parameter is not used.
318:デフォルトの名無しさん
07/11/21 19:35:11
>>316
それは WM_PRINT じゃ?
319:デフォルトの名無しさん
07/11/21 19:37:50
WM_PRINTと勘違いしてないか?
320:デフォルトの名無しさん
07/11/21 20:28:56
>>317
URL貼るなら最後まで読めよw
> For some common controls, the default WM_PAINT message processing checks the wParam parameter.
> If wParam is non-NULL, the control assumes that the value is an HDC and paints using that device context.
321:デフォルトの名無しさん
07/11/21 20:38:07
そんなイレギュラーな仕様は常用すべきではないだろう
322:デフォルトの名無しさん
07/11/21 20:58:36
>>321
お前英語苦手だろw
もう少し詳しく説明されてる古いWin32SDKヘルプの説明を貼ってやろう
> Handle to the device context to draw in. If this parameter is NULL, use the default device context.
> This parameter is used by some common controls to enable drawing in a device context other than the default device context.
> Other windows can safely ignore this parameter.
323:デフォルトの名無しさん
07/11/21 22:11:02
何にせよまずはBeginPaintが基本ということでいいのでは?
324:デフォルトの名無しさん
07/11/21 23:09:27
>>314
URLリンク(www.microsoft.com)
URLリンク(homepage1.nifty.com)
URLリンク(homepage1.nifty.com)
URLリンク(msdn.microsoft.com)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4223日前に更新/231 KB
担当:undef