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


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

Win32API質問箱 Build52
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 名前:デフォルトの名無しさん :2007/04/25(水) 14:45:22
壮絶に違う
HWND ポインタの中身(大きさも含む)は謎

つか >>248 でいいじゃん
書かないとわからん? sprintf(buf, "%p", hwnd); とすれば? ってことだ

253 名前:デフォルトの名無しさん :2007/04/25(水) 15:08:02
デスクトップやコントロールパネルなどの
主要なシェルフォルダを指すGUIDのリストってどこかにないでしょうか?

254 名前:デフォルトの名無しさん :2007/04/25(水) 15:52:11
>>253
レジストリ

255 名前:デフォルトの名無しさん :2007/04/25(水) 16:12:40
>>253に便乗だけど
マイコンピュータとかコントロールパネルとかかもしれないpIDLがあるとき
CLSIDみたいな::{...}に変換する術ってないすか?


256 名前:デフォルトの名無しさん :2007/04/25(水) 16:38:02
SHGDN_FORPARSING

257 名前:デフォルトの名無しさん :2007/04/25(水) 16:45:20
>>250
ありがとうございます。調べてみます。

258 名前:デフォルトの名無しさん :2007/04/25(水) 17:08:15
サブクラスを使って、エディットコントロール内でEnterキーを押したら
メッセージボックスを出すようにしているのですが、その後、
エディットコントロール内で改行されてしまいます。
Enterを押したときにメッセージボックスだけを出して、
その後改行しないようにするにはどうすればいいのでしょうか?

259 名前:242 :2007/04/25(水) 17:17:16
>>252
つきあってくれてありがとう。

sprintf(buf, "%p", hwnd);
ってやるとbufにはhwndのアドレスが入るとおもってるんですが間違いですか?
アドレスって再利用されて一意ではない気がするんです。

260 名前:デフォルトの名無しさん :2007/04/25(水) 17:33:12 ?2BP(222)
>>259
>ってやるとbufにはhwndのアドレスが入るとおもってるんですが間違いですか?

間違いです。何のためのハンドルかと。

261 名前:デフォルトの名無しさん :2007/04/25(水) 17:34:45
エクスプローラもどきを作っています。
現在、アイコンをGetIconOfで取得しているのですが
こいつは該当フォルダの中のアイテムのアイコンしか取得できず、
デスクトップ自身のアイコンを取得することができません。

何か良い方法があれば教えてください。

262 名前:228 :2007/04/25(水) 17:35:02
>229さん、230さん
レスありがとうございました。
頂いた情報で実装出来そうです、ありがとうございます。


263 名前:デフォルトの名無しさん :2007/04/25(水) 17:35:24
そもそもハンドルはポインタじゃないから、中身を気にしてはならんと思うんだが。

264 名前:242 :2007/04/25(水) 18:23:07
>>260
>>263
考えてみました。
ハンドル=構造体へのポインタと勘違いしていました。

付き合ってくれた方、ありがとう。というか、すんませんでした。

265 名前:デフォルトの名無しさん :2007/04/25(水) 18:28:23 ?2BP(222)
ハンドルが構造体へのポインタとして実装されていたとしても、わざわざ「ハンドル」
と読んでいるのは何のためなのかと。

266 名前:デフォルトの名無しさん :2007/04/25(水) 18:31:33
>>258をお願いします・・・m(_ _)m

267 名前:デフォルトの名無しさん :2007/04/25(水) 18:47:48
>>258
Enterキーを処理した後、EDIT本来のプロシージャに処理回してない?

268 名前:デフォルトの名無しさん :2007/04/25(水) 18:53:30
>>267
エディットコントロールのプロシージャの最後は

return CallWindowProc(DefInProc, hwnd, msg, wp, lp);

にしてます。これをどうすればいいのでしょうか・・・
return 0;とかにしてもエディットコントロール自体が消えてしまいます;;

269 名前:デフォルトの名無しさん :2007/04/25(水) 19:02:14
>>267
Enterキーの時だけ、プロシージャに処理を渡さないようにすればいい

270 名前:デフォルトの名無しさん :2007/04/25(水) 19:02:28
>>268
>Enterキーを処理した後

271 名前:デフォルトの名無しさん :2007/04/25(水) 19:07:28
SubclassProc(hwnd, msg, wparam, lparam)
{
switch(msg)
{
case WM_KEYDOWN:
if(wparam == VK_RETURN)
{
(処理)
return; // DefWindowProc()いらない
}
}
}

こういうことか?リターンキーの時だけ弾ければいいってこと?


272 名前:258 :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 名前:デフォルトの名無しさん :2007/04/25(水) 19:15:58
WM_CHAR

274 名前:258 :2007/04/25(水) 19:29:27
WM_CHARにしてみたら文字の入力すら出来なくなったのですが・・・;;
きっと基本的なことなのでしょうけど、何時間も止まってると泣きたくなってくる・・・

275 名前:デフォルトの名無しさん :2007/04/25(水) 19:31:19
そりゃそうだよなぁ。

276 名前:デフォルトの名無しさん :2007/04/25(水) 19:37:31
>>258
if文をよ〜く見直してみろEnterキー以外もトラップしてるぞ

277 名前:258 :2007/04/25(水) 19:45:58
>>276
Shiftの事でしょうか?Shift全部はずして、単純にif(wp==VK_RETRUN){}にしても
やはり同じ結果になりました。これは一体何がどうあghwrへあぃtjr

278 名前:デフォルトの名無しさん :2007/04/25(水) 19:47:44
>>277
トラップしないキーはreturn 0;しないでデフォルトプロシージャに渡すのだ。

279 名前:258 :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 名前:デフォルトの名無しさん :2007/04/25(水) 19:55:15
>>279
それをWM_CHARでやる

281 名前:デフォルトの名無しさん :2007/04/25(水) 20:00:15
できました
みなさま本当にありがとうございました


282 名前:258 :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 名前:デフォルトの名無しさん :2007/04/25(水) 20:10:21
>>258
メッセージループのところにTranslateMessage(&msg);はあるか?

 // メッセージループ
 MSG msg;
 while(GetMessage(&msg, NULL, NULL, NULL)) {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }

284 名前:258 :2007/04/25(水) 20:15:53
出来ましたあああああああああ;;
caseの終わるところをreturn 0からbreak;に直したら出来ました;;
WM_CHARで捕まえて、全部return0にしてたせいで入力されないようになってたみたいです。。。
ありがとうございました

285 名前:デフォルトの名無しさん :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 名前:デフォルトの名無しさん :2007/04/25(水) 21:44:32
pFromはあくまでもファイル名を指定するためのバッファらしいので
"H:\\*"みたいにワイルドカードを使うってのはダメ?

288 名前:デフォルトの名無しさん :2007/04/25(水) 21:50:56
>>287
教えていただいた方法で解決できました!
結構長い間ひっかかっていたので、助かりました。
ありがとうございました。

289 名前:デフォルトの名無しさん :2007/04/25(水) 22:40:16
GUIアプリからコンソール用のアプリを影で動かし(て、その結果をエディタに送り)たいんですけど
そういうAPIってありますか?

290 名前:デフォルトの名無しさん :2007/04/25(水) 22:44:12
はぁ?

291 名前:デフォルトの名無しさん :2007/04/25(水) 22:44:51
無い

はい次

292 名前:デフォルトの名無しさん :2007/04/25(水) 22:44:55
あります

293 名前:デフォルトの名無しさん :2007/04/25(水) 22:51:38
ありますが、

はい次

294 名前:デフォルトの名無しさん :2007/04/25(水) 22:52:22
APIに関係することか、わかりませんがお願いします。

自己解凍書式によくあるような

> copy /b hoge.exe + datafile

でつくった hoge.exe から datafile の中身を取る
プログラムを作りたいのですがやり方を教えて頂けないでしょうか?

295 名前:デフォルトの名無しさん :2007/04/25(水) 22:53:39
*** main(char**arg,int argl) ...................................................

296 名前:デフォルトの名無しさん :2007/04/25(水) 22:59:30
>>294
「リソース」をキーワードに基本から勉強しなおしなさい

297 名前:デフォルトの名無しさん :2007/04/25(水) 23:10:47
copyで連結したものをリソースとして扱えるか?
俺にはイメージヘッダからイメージサイズを見て、
それを元にdataの先頭領域を求める方法になる気がする。
違ったらすまん

298 名前:デフォルトの名無しさん :2007/04/25(水) 23:13:51
copy /b hoge.exe + datafile + datafilesize

299 名前:デフォルトの名無しさん :2007/04/25(水) 23:15:52
ぐぐってみたらこういう方法だそうです

プログラムに4バイトのリソースを埋め込む。
そのリソースを読み込んでその値だけ、読み飛ばして自分自身を解凍するプログラムを作る。
何らかの手段で4バイトのリソースに自己解凍プログラムのサイズを書き込む。
自己解凍プログラムの後ろに実際のデータを書き込む。

300 名前:デフォルトの名無しさん :2007/04/25(水) 23:18:20
かなりコンパイラ依存な質問ですが・・・
FindNextFileがVisual C++ 6.0でちゃんと動くのにGCC(gcc version 3.4.5 (mingw special))でちゃんと動きませんorz
http://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 名前:デフォルトの名無しさん :2007/04/25(水) 23:24:41
>>289
名前なしパイプを使ってリダイレクト。

CreatePipe, DuplicateHandle,
CreateProcess(STARTF_USESTDHANDLESがヒント),
PeekNamedPipe, ReadFileなどの関数を使う。

待機関数を使ったプロセスの終了判定と、
PeekNamedPipeとReadFileの順序を巧く管理しないと止まるので注意。


じゃぁ、約束のおっぱいをうpしてね

302 名前:デフォルトの名無しさん :2007/04/25(水) 23:26:03
(・) (・)

303 名前:デフォルトの名無しさん :2007/04/25(水) 23:29:15
 D /     ∩___∩     \_WW/
 ・  ≪     | ノ      ヽ    ≫ D ≪
 V ≪    /  ●   ● |   ≫ ・ ≪
 ・  ≪    |  ///( _●_)//ミ   ≫V ≪
 D ≪   彡、   |∪|  、`\  ≫ ・ ≪
 ! ≪ / \   ヽノ /_> /  ≫ D ≪
   ≪ \|   ・    ・ / /   ≫ ! ≪
MMM\  |       / ̄     /MMM\
       |  /\ \
       | /    )  )
       ∪    (  \
            \_)


304 名前:デフォルトの名無しさん :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 名前:デフォルトの名無しさん :2007/04/25(水) 23:31:01
ところでDVDってドメスティックバイオレンスオブダイナミカルなの?

306 名前:デフォルトの名無しさん :2007/04/25(水) 23:32:05
>>300
どのディレクトリに対して実行しても結果は同じですか?

307 名前:デフォルトの名無しさん :2007/04/25(水) 23:35:58
>>300
OSは?

308 名前:デフォルトの名無しさん :2007/04/25(水) 23:36:35
>>300
c:\directory\*
c:\\directory\\*
じゃねーの?

309 名前:デフォルトの名無しさん :2007/04/25(水) 23:38:01
>>300
ワイルドカードが展開されてるんだろ

310 名前:デフォルトの名無しさん :2007/04/25(水) 23:41:24
見た感じFindNextFileが必ずゼロを返してるような動き。
一個だけ正しく見つけてあとはサヨウナラだな。

311 名前:デフォルトの名無しさん :2007/04/25(水) 23:43:54
FindFirstFile に渡される引数の内容(argv[1]) が違うから
表示させてみれば疑問は解決するはず

312 名前:デフォルトの名無しさん :2007/04/25(水) 23:46:35
そこで、ダブルクォーテーションですよ

313 名前:デフォルトの名無しさん :2007/04/26(木) 00:24:23
>>300
GCCに付属してるCRT_noglob.oをリンクすると解決するお

海外での似た質問と解凍:
http://www.cygwin.com/ml/cygwin/1998-11/msg00165.html
http://www.cygwin.com/ml/cygwin/1998-11/msg00235.html

314 名前:デフォルトの名無しさん :2007/04/26(木) 00:48:10
ぼ・・・僕ハッカー

315 名前:デフォルトの名無しさん :2007/04/26(木) 09:54:11
WTLでCToolBarCtrlを使ってツールバーを作っています。
manifestを指定してXPスタイルにしているのですが、
そうするとアイコンサイズと比べ、ボタンサイズが大きくなりすぎてしまいます。

どうしても小さくしたいのですが、SetButtonSizeを指定しても無視されてしまい
自動でサイズが決定されてしまいます。
ボタンのサイズを小さくしたいのですが、どうすればできますか。

316 名前:デフォルトの名無しさん :2007/04/26(木) 10:07:41
ビットマップを印刷する処理でカラープリンタに出力するとおk、なんですが、
白黒プリンタに印刷すると真っ黒画面(プリンタドライバのメモリ不足でよくおきるヤシ)となります。

Win32APIで、印刷時にビットマップを描くとき、白黒プリンタを意識する指定ってありましたっけ?


317 名前:デフォルトの名無しさん :2007/04/26(木) 10:09:59
ShellExecuteで起動したソフトが起動しきったかどうかを確認する方法を教えてください

318 名前:デフォルトの名無しさん :2007/04/26(木) 10:14:26
起動しきった、の定義は?
メッセージループが回りだしたでいいのかな

319 名前:デフォルトの名無しさん :2007/04/26(木) 10:28:17
CreateProcessのほうがいいかもね

320 名前:デフォルトの名無しさん :2007/04/26(木) 10:34:52
>>318
起動してから表示されるまでに時間がかかるソフトがあるので
画面が表示されたらと思っていました。
>>319
ShellExecuteよりShellExecuteExのインスタンスハンドルで何とかなりそうでしょうか?

321 名前:デフォルトの名無しさん :2007/04/26(木) 10:39:08
316もヨロ

322 名前:デフォルトの名無しさん :2007/04/26(木) 10:43:13
>>317
FindWindow

323 名前:デフォルトの名無しさん :2007/04/26(木) 10:44:44
>>320
ShellExecuteはシェルに命令投げるだけなので実際の起動処理は全部シェルがやる。
だからShellExecuteで起動したプロセスの処理を監視するならフックとかの回り道が必要になるし、
CreateProcessに比べて面倒極まりないから>>319の言うとおり
起動したプロセスの監視をしたいならCreateProcessがよろし。


324 名前:デフォルトの名無しさん :2007/04/26(木) 10:48:44
>>316
正解なのかどうなのかわからんが…

printerなDCに直接 StretchBlt したときに真っ黒出力されたことがあった。
printer と同じ解像度のメモリDCに一旦StretchBlt して、
そのメモリDCをprinterなDCに BitBlt で回避できた

325 名前:デフォルトの名無しさん :2007/04/26(木) 10:52:13
>>317
ShellExecuteExでfMaskにSEE_MASK_NOCLOSEPROCESSを指定すると
起動したプロセスのハンドルがhProcessに返されるので
WaitForInputIdleを呼べばいいかと。

326 名前:デフォルトの名無しさん :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 :2007/04/26(木) 10:59:45
サンクス>>324 >>326

そう、その辺りの話ですよね。

自分も、StrechBlt → BitBlt → StretchDrawDIB と変えてきて、
あーこれで解決したーと思ってたんですが、
カラービデオプリンターはおk、白黒ビデオプリンターで真っ黒、見たいな現象。

>GetDeviceCapsで出力APIがサポートされているか調べるとか・・・かな

kwsk

StrechDrawDIBが動作しないとか???

329 名前:デフォルトの名無しさん :2007/04/26(木) 11:02:13
白がちゃんとした白じゃないから黒くなるのでは
StrechBltMode変えたら

330 名前:デフォルトの名無しさん :2007/04/26(木) 11:05:53
>>328
GetDeviceCapsでRASTERCAPS調べて
RC_STRETCHBLTビットが立ってれば、
StreathBltを使って良いとか、そういう話し

あと、StretchDrawDIBってMSDNにはないけど・・・?
ググっても、自作っぽい関数にしか引っかからないぞw

331 名前:デフォルトの名無しさん :2007/04/26(木) 11:24:47
>>327

>>325


332 名前:316 :2007/04/26(木) 11:26:43
ラジャー>>329

やってみます。あ、でもプリンタ使えるの昼から。

ゴメンナサイ>>330

実体はこれです。
 ↓
procedure TBitmapPrinter.StretchDrawDIB(Canvas: TCanvas; r: TRect);
var
OldMode: Integer; // StretchMode のセーブ
begin
OldMode := SetStretchBltMode(Canvas.Handle, COLORONCOLOR);
StretchDIBits(Canvas.Handle,
r.Left, r.Top,
r.Right - r.Left, r.Bottom - r.Top,
0, 0, BitmapInfo^.bmiHeader.biWidth,
BitmapInfo^.bmiHeader.biHeight,
ImagePtr, BitmapInfo^, DIB_RGB_COLORS, SRCCOPY);
SetStretchBltMode(Canvas.Handle, OldMode);
end;

333 名前:デフォルトの名無しさん :2007/04/26(木) 11:29:35
>>331
すみません、見落としてました・・・
>>325
ありがとうございます。
それでちゃんとできました。


334 名前:デフォルトの名無しさん :2007/04/26(木) 12:16:27
>>333
WaitForInputIdleはコンソール不可なので注意ね。

335 名前:316 :2007/04/26(木) 12:21:16
つまり、
>OldMode := SetStretchBltMode(Canvas.Handle, COLORONCOLOR);
を、

COLONCOLORから変えればよいんだ。

BLACKONWHITEとWHITEONBLACKって何で2つもあるよ。。。

336 名前:デフォルトの名無しさん :2007/04/26(木) 12:25:35
>>335
>BLACKONWHITEとWHITEONBLACKって何で2つもあるよ。。。

ANDとORの違い。

337 名前:デフォルトの名無しさん :2007/04/26(木) 12:26:51
>ANDとORの違い。
普通の印刷ではどちらを使うんですか?

338 名前:デフォルトの名無しさん :2007/04/26(木) 12:32:03
>>337
普通の印刷はどうかしりませんが、

BLACKONWHITEは 0 & 1 = 0で黒が残る
WHITEONBLACKは 0 | 1 = 1で白が残る

ただそれだけ。

339 名前:デフォルトの名無しさん :2007/04/26(木) 12:37:49
まあ両方やってみればわかる
モノクロビットマップにStrechBltして画面表示してみるのもいいかもな

340 名前:デフォルトの名無しさん :2007/04/26(木) 13:21:11
>>334
了解しました!
ありがとうございます!!

341 名前:デフォルトの名無しさん :2007/04/26(木) 15:39:58
あるウィンドウを親として、新たに作った子ウィンドウを貼り付けたい(親側をドラッグすると、子ウィンドウもそれに追随するような)のですが、どのように実装したらよいかアドバイスいただけませんでしょうか。
よろしくお願いいたします。


342 名前:デフォルトの名無しさん :2007/04/26(木) 15:41:52
CreateWindowでWS_CHILD

343 名前:316 :2007/04/26(木) 16:22:55
SetStretchBltModeは関係無いみたいです。

真っ黒に出たり、ちゃんと出たり、不安定。

344 名前:316 :2007/04/26(木) 16:53:35
連続印刷した場合に、真っ黒になります。

345 名前:316 :2007/04/26(木) 16:57:43
連続投稿すみません。

自アプリが印刷した結果がWinのスプールにまだ残っているかどうか、判断する方法はありますか?

346 名前:デフォルトの名無しさん :2007/04/26(木) 17:18:50
具体的にそうなるコードを出してみては
そもそも真っ黒になるのはプログラムが悪いんだから

347 名前:316 :2007/04/26(木) 17:30:29
自己解決しました、お騒がせしてすみません。

348 名前:316 :2007/04/26(木) 18:30:21
347は偽者です。

コードは332です。

349 名前:デフォルトの名無しさん :2007/04/26(木) 18:46:54
>>348
>>332には、印刷時のページ更新とかないだろ

350 名前:デフォルトの名無しさん :2007/04/26(木) 19:51:02
StartPageしたあとに毎回SetStretchBltModeしてない
とかいう落ちか?

351 名前:デフォルトの名無しさん :2007/04/26(木) 22:30:22
いままでの流れ。

>>あーや
・質問
  ビットマップを印刷する処理で
   カラープリンタ→出力おk
   白黒プリンタ→真っ黒画面
  なんで?

>>324 → あーや
  プリンタのDCに直接StretchBltした時、真っ黒出力経験あり。
  キャッシュDCを作成してStretchBlt→BitBltの提案。

>>326 → あーや
  GetDeviceCapsでプリンタ能力も調べろと提案。

>>あーや
  >>324の方法でカラーはおk。白黒プリンターはやっぱりダメ。
  >>326のいうGetDeviceCapsに初耳。

>>329 → あーや
  白≒黒より、StrechBltModeの設定を推測。

>>330 → あーや
  GetDeviceCapsのRC_STRETCHBLTフラグの意味を教える。


352 名前:デフォルトの名無しさん :2007/04/26(木) 22:30:53
(つづき)
>>あーや → 329
  昼飯はトンカツ定食にしようか悩みつつ返信。

>>あーや → 330
  GetDeviceCapsを理解。

お昼だけにソースをさらしてみる。

>>あーや
  SetStretchBltModeのBLACKONWHITEとWHITEONBLACK気付く。
  なお、ここで返信した336,338,339は、実は奇遇にも同じ町内。

>>あーや
  とりあえず、カラープリンタ、白黒プリンタ出力おkっぽいが、
  連続印刷した場合、白黒プリンタがやっぱりダメ。
  なぜか、StrechBltModeは関係ないと断定。
  そして、あーやの興味はスプールへ・・・

>>あーや → 347
  少しカチンと来る。

>>349-350
  解答発表?

353 名前:デフォルトの名無しさん :2007/04/27(金) 01:55:35
ダイアログボックスを作って、初期のフォーカスをダイアログボックス内のエディットコントロールに
SetForcusで配置したいのですが、ダイアログボックス内のエディットコントロールのハンドルが
分からないので出来ません。というよりも、ダイアログボックス内のウィンドウにはどのように
ハンドルをつければいいのでしょうか?

354 名前:デフォルトの名無しさん :2007/04/27(金) 02:14:25
GetDlgItem

355 名前:デフォルトの名無しさん :2007/04/27(金) 02:21:49
ダイアログベースでBS_DEFPUSHBUTTONを指定すると
「Enter」を押した時、ボタンを押下できるけど普通にリソースを
使わず(CreateWindow等)で作成したボタンに対して「Enter」は反応を
示さないんだけど。これはどうやって解決すればいいんでしょうか?

因みに「Enter」に反応するのはIDOKでそれ使ってもいいんですが、
できれば自分が指定したコントロールIDに変更できればいいなと思って
探してDM_SETDEFIDなるものを発見してSendMessage使って試したんだけど
やっぱりうまくいかなかった。これはダイアログにしか通用しないのかな。

因みにSendMessageはこんな感じ(WM_CREATE内で使ってる)
SendMessage(hWnd, DM_SETDEFID, (WPARAM)ID_CONTROL, 0L);

356 名前:デフォルトの名無しさん :2007/04/27(金) 03:20:26
>>354
ありがとうございました。無事フォーカス設定することができました。
しかし、エディットコントロールにフォーカスを持っていったら何故か
ボタンをクリックしても動作しないようになりました(Enterキーでは動作する)。
フォーカス外すと普通にボタンの機能は復活します。これは何が原因なのでしょうか?

357 名前:デフォルトの名無しさん :2007/04/27(金) 08:01:56
付箋紙ソフトのように、たくさんのウィンドウを表示してもタスクバーに何も表示されないようにするには
どうしたらいいのでしょうか?

358 名前:デフォルトの名無しさん :2007/04/27(金) 08:03:22
>>356
Enterキー以外の処理(else側)はスルーしてるんじゃないの?


359 名前:デフォルトの名無しさん :2007/04/27(金) 08:05:06
>>357
いろいろ手法はあるけど?
統括管理ソフトを、時計横のタスクバーに駐在させるとか・・・

想定するターゲットを詳しく

360 名前:デフォルトの名無しさん :2007/04/27(金) 08:07:38
>>357
っ不可視の親Window
っWS_POPUP

361 名前:デフォルトの名無しさん :2007/04/27(金) 08:12:02
>>359ー360
試してみます!

362 名前:デフォルトの名無しさん :2007/04/27(金) 08:29:07
>>355
IsDialogMessageは?

363 名前:355 :2007/04/27(金) 12:23:56
>>362
ダイアログでの作成じゃない場合(メインウィンドウ)の
時どうやってダイアログと同じように実現すればいいのかを知りたい。


364 名前:デフォルトの名無しさん :2007/04/27(金) 12:41:48
ウィンドウプロシージャでEnterキーをトラップすりゃいいんじゃねぇの?

365 名前:355 :2007/04/27(金) 12:43:36
やっぱそれしかないのかな。
IDOKはデフォルトでEnter拾ってくるから
そのIDOKの設定を別IDに変更できるんじゃないかと思ってたんだが

366 名前:355 :2007/04/27(金) 12:44:47
因みにDM_GETDEFIDやDM_GETDEFIDはダイアログプロシージャにしか
意味無いんだよね?普通にメインウィンドウでやっても何の効果もなかったから

367 名前:デフォルトの名無しさん :2007/04/27(金) 14:03:22
342さんレスありがとうございます。
>342 CreateWindowでWS_CHILD
試してみたんですが、うまくいかず色々調べていたら、
親のウィンドウの拡張アトリビュートに「WS_EX_LAYERED」が立ってました、
このフラグを消すと正しく動くことからこのフラグが問題かと思うのですが、
「WS_EX_LAYERED」が立ってるウィンドウに対し「WS_CHILD」のような子ウィンドウを作ることは出来ませんでしょうか
重ね重ね申し訳ございませんが、よろしくお願いいたします。


368 名前:デフォルトの名無しさん :2007/04/27(金) 16:49:28
仕様書嫁

369 名前:デフォルトの名無しさん :2007/04/27(金) 16:58:05
そもそも正しく動く、動かないとはどういうことか

370 名前:316 :2007/04/27(金) 17:13:14
PCのメモリを1ギガにしたら解決しました。
フォトプリンタってのは、普通のプリンタよりメモリを食うものなんでしょうか。

それからStrechBltModeは無意味というか無関係ですね。
プリンタドライバも流石にStrechBltModeが間違っててもエラーを起こさないようにしてんじゃないですか?

>>>あーや → 347
>  少しカチンと来る。
 ↑
だから347はニセモノです。

371 名前:デフォルトの名無しさん :2007/04/27(金) 17:15:51
ニセモノが出るって事は、キミのやりとりに問題があるってことだよ

372 名前:デフォルトの名無しさん :2007/04/27(金) 18:12:50
質問があります。
UNICODE版のプログラムを作成していますが、
部分的にANSI版のAPIを使用したい箇所があります。
それで関数名の後に直接”CreateWindowA”みたいにAとかWを付けると
ANSI UNICODEの呼び出しの切り替えができるようなことが本に書かれて
いるのですが、直接Aをつけても関数がみつからないとコンパイラから
エラーがでます。
教えてください。よろしくお願いします。

373 名前:372 :2007/04/27(金) 18:17:30
includeファイルの位置変更したら解決しました.
アホな質問してすみませんでした

374 名前:デフォルトの名無しさん :2007/04/27(金) 18:27:18
>>363
IsDialogMessageは、ダイアログでない普通のウィンドウも対象にできる。

375 名前:デフォルトの名無しさん :2007/04/27(金) 20:10:24
>>370
>PCのメモリを1ギガにしたら解決しました。
その場しのぎとしてはセーフだが、
調査したほうが良いよ。

ドライバのver upで能力差とか、
ソースのメモリDC解放してないとか、
どっかで使いまわしているとか、
BitBltを使った初期化(WHITENESS、BLACKNESS)とか
ビットマップをダンプしてみるとか・・・



376 名前:371 :2007/04/27(金) 21:54:30
 

377 名前:デフォルトの名無しさん :2007/04/27(金) 23:30:08
WH_KEYBOARD_LLはコマンドプロンプトに通用するですか?

378 名前:デフォルトの名無しさん :2007/04/28(土) 00:40:51
>>377
cmd.exeでDOS窓を開いたときの動作の話なら、通用した(今試した)

379 名前:デフォルトの名無しさん :2007/04/28(土) 08:10:27
とん

380 名前:デフォルトの名無しさん :2007/04/28(土) 08:26:04
こつ

381 名前:デフォルトの名無しさん :2007/04/28(土) 11:09:22
フォルダのデフォルトのアイコンって取得できますか?


382 名前:デフォルトの名無しさん :2007/04/28(土) 11:10:15
はい

383 名前:デフォルトの名無しさん :2007/04/28(土) 11:23:52
>>382
教えてくれよん

384 名前:デフォルトの名無しさん :2007/04/28(土) 11:30:47
>>381みたいな聞き方をするからBOOLで返されちゃうんだよ

385 名前:デフォルトの名無しさん :2007/04/28(土) 11:44:05
>>381に対する一番正確な答えになっているしな。

386 名前:デフォルトの名無しさん :2007/04/28(土) 12:14:18
自己解決したような気がします
SHGetFileInfo と SHGFI_SYSICONINDEXあたりすか

387 名前:デフォルトの名無しさん :2007/04/28(土) 12:43:05
>>372
CreateWindowはCreateWindowExのマクロに過ぎないので
CreateWindowExAにする必要がある

388 名前:デフォルトの名無しさん :2007/04/28(土) 13:06:45
>>381に便乗質問だけど

SHGetFileInfo に空文字渡すとフォルダのアイコンが返ってくるけど、
これでいいんですか?

389 名前:デフォルトの名無しさん :2007/04/28(土) 16:07:46
おまえらほんと捻くれてるよな

390 名前:デフォルトの名無しさん :2007/04/28(土) 16:16:36
必要な戻り値の型推論ができないだけ

391 名前:デフォルトの名無しさん :2007/04/28(土) 16:25:28
GetMessageの戻り値みたいに融通効かせてください><

392 名前:デフォルトの名無しさん :2007/04/28(土) 18:08:30
キャストしろ

393 名前:デフォルトの名無しさん :2007/04/28(土) 18:34:01
僕を神にしてください

394 名前:デフォルトの名無しさん :2007/04/28(土) 19:57:54
キャストしろ

395 名前:デフォルトの名無しさん :2007/04/28(土) 20:02:55
delete[]すればいんじゃね?

396 名前:デフォルトの名無しさん :2007/04/28(土) 20:06:27
洞窟の出口で秘宝を奪うべく待ってればいいと思うよ

397 名前:デフォルトの名無しさん :2007/04/28(土) 20:18:21
APIもせめて同じような定数は列挙型に纏めるとかしたらすっきりするんじゃないの?

398 名前:デフォルトの名無しさん :2007/04/28(土) 20:25:50
SDKとAPIを混同するな

399 名前:デフォルトの名無しさん :2007/04/28(土) 20:41:09
397の文脈ではAPIでもいいと俺は思う。
関数なんかだけではなく、それを呼び出すために必要な定数や型もひっくるめてAPIと言うのだと思う。

400 名前:デフォルトの名無しさん :2007/04/28(土) 20:47:12
勝手な定義を脳内で作って知ったかするのはやめておけ。

401 名前:デフォルトの名無しさん :2007/04/28(土) 20:51:55
ApplicationPrigramInterfaceと
SoftwareDevelopmentKit
の違いがわかりません先生

402 名前:デフォルトの名無しさん :2007/04/28(土) 20:54:31
ヘッダファイル自体やライブラリや関連ツールなどがSDK
ヘッダファイルやタイプライブラリなどで定義されている内容がAPI
だと思っていたが実際のところ正しい定義なんて考えたこともなかったな

403 名前:デフォルトの名無しさん :2007/04/28(土) 21:04:06
そもそもどこまでがAPIなんて誰もそんなことを定義していない。

C/C++以外からAPIを利用する場合は列挙型も何も存在しないし、
変なところで勝手に決めてしまうと他の言語から使うときに、
API以外の何か謎な物を使っていることになってしまう。

404 名前:デフォルトの名無しさん :2007/04/28(土) 21:06:31
他の言語であらかじめされている定義が無いということね。

405 名前:デフォルトの名無しさん :2007/04/28(土) 21:24:56
あれだ、web系のアホが紛れ込んでるのかもしれん。
「APIと言えばwebサービスのインタフェースを指すようになった」
らしいぞ。

406 名前:デフォルトの名無しさん :2007/04/28(土) 21:42:36
整数も渡せるだろ

407 名前:デフォルトの名無しさん :2007/04/28(土) 21:52:13
JAVAのinterfaceには定数(もどき)を定義できるし、定数を含めて問題あるまい。

というか既に定数無いか?

408 名前:デフォルトの名無しさん :2007/04/28(土) 21:57:42
>>401
Prigram

409 名前:デフォルトの名無しさん :2007/04/28(土) 22:14:08
何か美味そう

410 名前:デフォルトの名無しさん :2007/04/28(土) 23:19:52
画面に表示しないプログラムを作りたいのですが
時計の横にアイコンを登録することは出来ますか?

411 名前:デフォルトの名無しさん :2007/04/28(土) 23:26:49
>>410
できる。

412 名前:デフォルトの名無しさん :2007/04/28(土) 23:27:08
タスクバー?
可能です。

413 名前:デフォルトの名無しさん :2007/04/28(土) 23:33:31
GT-Rは5台持ってますよ
R32がVspecIIのガンメタとNISMOの白
R33がVspecのシルバー
R34がMspecのホワイトとVspecII Nurのベイサイドブルー

414 名前:デフォルトの名無しさん :2007/04/28(土) 23:39:56
ま、俺のGTOには敵わないだろうけどな。

415 名前:デフォルトの名無しさん :2007/04/29(日) 01:51:20
NAだけどな。

416 名前:デフォルトの名無しさん :2007/04/29(日) 13:28:15
>>411
だからなんでみんな戻り値がboolなんだよw

417 名前:デフォルトの名無しさん :2007/04/29(日) 13:31:21
出来るって分かれば自分で調べるだろ

418 名前:デフォルトの名無しさん :2007/04/29(日) 13:55:07
S_OKだけなら猿でも返せる

419 名前:デフォルトの名無しさん :2007/04/29(日) 14:00:51
>>410
メインウィンドウを非表示で作ればいい。
あとはタスクトレイ アイコンとかでググれ。

420 名前:デフォルトの名無しさん :2007/04/29(日) 14:02:41
なんかこの質問・回答にデジャヴを感じる

421 名前:デフォルトの名無しさん :2007/04/29(日) 14:06:05
間欠泉のようなもんだから

422 名前:デフォルトの名無しさん :2007/04/29(日) 16:00:03
Shell_NotifyIconだったっけか


423 名前:422 :2007/04/29(日) 16:02:09
かすかな記憶を頼りに書いてみて調べてみたらビンゴだった
俺の記憶力もまだ捨てたもんじゃないな

424 名前:デフォルトの名無しさん :2007/04/29(日) 19:47:52
ワレのドタマカチ割って脳みそストローでチューチュー吸うたろか!

425 名前:デフォルトの名無しさん :2007/04/29(日) 19:53:13
自分の頭を割るというのもなかなか豪儀だな

426 名前:デフォルトの名無しさん :2007/04/29(日) 19:55:41
なめとんかいわれ

427 名前:デフォルトの名無しさん :2007/04/29(日) 19:58:29
貝割れ大根を嘗めているのか。あれは舌にピリッと来るよな。
しかし倒置法とはなかなか巧みじゃないか。

428 名前:デフォルトの名無しさん :2007/04/29(日) 20:15:36
じょんだらりん

429 名前:デフォルトの名無しさん :2007/04/29(日) 20:18:33
これをUNICODEビルドしたときにメッセージボックスに化けないで表示するには
どうしたらいいでしょうか?
XP, VC6です。

  HANDLE   hFile;
  TCHAR    buf[10];
  DWORD    dwSize;

  hFile = CreateFile(
        _T("C:\\aaa.txt"),
        GENERIC_READ,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
  ReadFile(hFile, buf, 3, &dwSize, NULL);
  CloseHandle(hFile);

  buf[3] = _T('\0');
  
  MessageBox(NULL, buf, _T(""), MB_OK);


430 名前:デフォルトの名無しさん :2007/04/29(日) 20:21:13
MultiByteToWideChar

431 名前:429 :2007/04/29(日) 20:21:39
テキストファイルはSJISで中身は abc と入っているだけです。

432 名前:デフォルトの名無しさん :2007/04/29(日) 20:31:04
"abc"のバイナリ表現はShift_JISやUS-ASCIIと、UTF-16とでは異なる。

433 名前:429 :2007/04/29(日) 20:42:04
読み込むファイルはSJIS固定

MultiByteToWideChar
変換元がPCSTR
変換後がPWSTR

これはひょっとしてUNICODE版でビルドしてる場合だけ
MultiByteToWideCharを使って変換をかけるって事ですか?

434 名前:デフォルトの名無しさん :2007/04/29(日) 20:44:56
いいえ

435 名前:デフォルトの名無しさん :2007/04/29(日) 20:45:04
ファイルをダウンロードしたときなど、完了すると「チロン!」という音が鳴りますが、
この音を鳴らすapiがあれば教えてください。

436 名前:デフォルトの名無しさん :2007/04/29(日) 20:45:40
MCI

437 名前:435 :2007/04/29(日) 20:48:57
>>436
ありがとうございました!

438 名前:デフォルトの名無しさん :2007/04/29(日) 20:51:59
ttp://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9802/mci/
ttp://www.ne.jp/asahi/nagoya/ahomaro/builder/cpb-059.html
ttp://wisdom.sakura.ne.jp/system/winapi/media/
ttp://www13.plala.or.jp/kymats/study/multimedia.html


439 名前:デフォルトの名無しさん :2007/04/29(日) 20:52:42
>>433
はい

440 名前:439 :2007/04/29(日) 21:15:28
ありがとうございました。

441 名前:429 :2007/04/29(日) 21:16:01
ちがう。429でした。

442 名前:デフォルトの名無しさん :2007/04/29(日) 23:13:32
>>426
はい

443 名前:デフォルトの名無しさん :2007/04/30(月) 00:13:19
ウモンドウ作らずにWM_〜受取れますか?

444 名前:デフォルトの名無しさん :2007/04/30(月) 00:14:58
はい。ウィンドウをお作りいただけば可能です。

445 名前:デフォルトの名無しさん :2007/04/30(月) 00:19:52
ウィンドウ要らないなら非表示にしとけばいい。

446 名前:デフォルトの名無しさん :2007/04/30(月) 00:34:00
WM_〜 = window message

447 名前:デフォルトの名無しさん :2007/04/30(月) 00:40:02
一瞬普通に読んでしまったが、ウモンドウってwww

448 名前:デフォルトの名無しさん :2007/04/30(月) 01:05:23
umondou?
umondow?


449 名前:デフォルトの名無しさん :2007/04/30(月) 04:46:30
タスクトレイのアイコンの画像を取得する方法ってありませんか?
もしくは特定のアプリのトレイにあるアイコン描画をフックしたいのですが。



450 名前:デフォルトの名無しさん :2007/04/30(月) 08:22:59
SetWindowsHookExのWH_KEYBOARD_LLはAltとかミ田キーも弄れますか?

451 名前:デフォルトの名無しさん :2007/04/30(月) 08:25:50
>>450
可能。つか、自分でやってみれ。
想像以上に簡単だから

452 名前:デフォルトの名無しさん :2007/04/30(月) 08:57:32
ミ田キーワロタ

453 名前:デフォルトの名無しさん :2007/04/30(月) 09:54:19
Runasで起動したIEのウェブページのハンドルの入手の仕方おしえてください。

454 名前:デフォルトの名無しさん :2007/04/30(月) 10:17:54
少しでも画面を有効に使うためにメニューバーの高さを極限まで細く
したいのですが、win32apiで可能でしょうか?
高さの取得はGetSystemMetricsで出来るのはわかったのですが、
設定がどうやっったらよいものか分かりません。どなたかやり方を教えて頂けませんでしょうか。

455 名前:デフォルトの名無しさん :2007/04/30(月) 10:29:34
0じゃいかんの?

456 名前:デフォルトの名無しさん :2007/04/30(月) 10:31:29
>>452
「ウェブページのハンドル」とは何ぞや?


>>454
レジストリに書いてWM_SETTINGCHANGEをブロードキャスト?


457 名前:452 :2007/04/30(月) 10:34:23
>>456
IEで表示したサイトのページをFindWindowAでゲットした値のことです。

458 名前:デフォルトの名無しさん :2007/04/30(月) 10:37:24
>>454
SystemParametersInfo で SPI_SETNONCLIENTMETRICS

他のアプリケーションにも影響を与える操作なんだが、自アプリケーションで制御するような代物なんかな?
# デスクトップ - プロパティ で設定するのを自動化したいのか?
# それはそれで、迷惑な造りかもしれんが…

459 名前:デフォルトの名無しさん :2007/04/30(月) 11:08:25
>>454
オーナードロー

460 名前:デフォルトの名無しさん :2007/04/30(月) 12:06:48
bccでDLLを作成してそのDLLを
LoadLibrary(TEXT("HOOKTEST.dll"));で読み出したら
DLLエントリーポイントが実行されたみたいなのだが
暗黙的に読み出したらDLLエントリーポイントが実行されないんだが
これは普通なのか?それとも何か設定が間違っているのか?

461 名前:デフォルトの名無しさん :2007/04/30(月) 12:11:24
あと
HINSTANCE hInstDLL;
#pragma data_seg(".sharedata")
HWND hWndtgt=NULL;
HHOOK hhook;
#pragma data_seg()

BOOL WINAPI DllEntryPoint(HINSTANCE hInstance,DWORD dwNotification,LPVOID lpReserved){
MessageBox(NULL,"DLL START","START",NULL);
hInstDLL=hInstance;
return TRUE;
}

int makehook(void){
hhook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)mousehookproc,hInstDLL,0);
if(hhook==NULL){
MessageBox(NULL,"MAKE HOOK ERROR","ERORR",MB_OK);
return 0;
}

return 1;
}

makehookを実行側で読み出すとhhookが絶対にNULLになるらしくフックがうまくいかない
LoadLibraryで明示的に呼び出してもうまくいかない
デバッカで見てみるとhInstDLLがnullになってるみたいなのだが何故?

462 名前:デフォルトの名無しさん :2007/04/30(月) 12:12:13
その、「実行されない」ってのはどこから解ったんだ?

463 名前:デフォルトの名無しさん :2007/04/30(月) 12:12:46
>>462
MessageBoxを入れてみました

464 名前:デフォルトの名無しさん :2007/04/30(月) 12:15:28
どうしてボーランドの言語仕様ってあそこまで見苦しいの?
クラスや関数名なんて汚らしいしIDEも不細工極まりない
C++にしろパスカルにしろ目障りで読む気すらしないね。

465 名前:デフォルトの名無しさん :2007/04/30(月) 12:17:41
ボーランド見苦しい
http://pc11.2ch.net/test/read.cgi/tech/1067474140/

466 名前:デフォルトの名無しさん :2007/04/30(月) 12:21:43
bccの#pragmaにdata_segなんてないぞ。

467 名前:デフォルトの名無しさん :2007/04/30(月) 12:25:11
>>466
WINDOWSプログラミングスパイスって本にのってたからそのまま使ってみたんだが、だめだったか・・・

468 名前:デフォルトの名無しさん :2007/04/30(月) 12:33:59
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdllpro/html/_win32_DllMain.asp
をみて、DllMain内で複雑な処理はできいないと理解しよう。

469 名前:デフォルトの名無しさん :2007/04/30(月) 12:37:36
_tDllMainな

470 名前:デフォルトの名無しさん :2007/04/30(月) 12:38:38
>>443
PeekMessageをスレッドの最初に呼んでおけば
そのスレッドにメッセージキューが作られるから
あとはスレッドメッセージで処理すればいい。
送信はPostThreadMessageで
受信はGetMessageのMSG構造体のHWNDが0のやつが
スレッド宛のメッセージ。

471 名前:デフォルトの名無しさん :2007/04/30(月) 12:43:44
BOOL WINAPI _tDllMain(HINSTANCE hInstance,DWORD dwNotification,LPVOID lpReserved){
hInstDLL=hInstance;
return TRUE;
}

修正

472 名前:デフォルトの名無しさん :2007/04/30(月) 12:49:24
ドラえもーん、これガソリンはレギュラーでも走るの?
いやガソリンでは無理だよ。もっとパワーのあるやつじゃないと。
プルトニウムだよのび太君。

473 名前:デフォルトの名無しさん :2007/04/30(月) 13:27:45
BOOL WINAPI _DllMain(HINSTANCE hInstance,DWORD dwNotification,LPVOID lpReserved){
hInstDLL=hInstance;
makehook(hInstance);
return TRUE;
}

intmakehook(HINSTANCE hInst){
hhook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)mousehookproc,hInst,0);
if(hhook==NULL){
MessageBox(NULL,"MAKE HOOK ERROR","ERORR",MB_OK);
return 0;
}

return 1;
}

にすると問題ないみたいなんだけど・・・
グローバル変数にコピーできない
なぜだ?

474 名前:デフォルトの名無しさん :2007/04/30(月) 13:45:13
WinAPIの質問じゃないような気がしてきた

475 名前:デフォルトの名無しさん :2007/04/30(月) 13:47:07
とりあえずフック抜いてインスタンスハンドルだけコピーするDLLでも作ってろ

476 名前:デフォルトの名無しさん :2007/04/30(月) 13:51:36
窓は作らずに(非表示ではなく)
DLLの関数からShell_NotifyIconで登録してGetMessageでメッセージを受取れますか?

477 名前:デフォルトの名無しさん :2007/04/30(月) 13:53:06
不可能

478 名前:デフォルトの名無しさん :2007/04/30(月) 13:54:27
Shell_NotifyIcon から タスクトレイアクションを invoke できるようにするために窓が必要

479 名前:デフォルトの名無しさん :2007/04/30(月) 14:00:08
なんか最近この質問多いな

480 名前:デフォルトの名無しさん :2007/04/30(月) 14:05:29
間欠泉のようなもんだから(2回目)

481 名前:デフォルトの名無しさん :2007/04/30(月) 14:09:08
タスクトレイ と フック は源泉なのでしょう

482 名前:デフォルトの名無しさん :2007/04/30(月) 14:24:49
フックは多少ややこしいから分からんでもないけど…

トレイアイコンの方は潔癖症に近くねぇ?
いいじゃねーかウィンドウ一つくらい

483 名前:デフォルトの名無しさん :2007/04/30(月) 14:30:09
メッセージ通知用ウィンドウなんてたくさん使われているよ。DDEとかシステム周りでもね。

484 名前:デフォルトの名無しさん :2007/04/30(月) 14:30:28
そもそも「窓作らずメッセージ受け取れますか?」ってやってみればすぐわかるじゃねーか

485 名前:デフォルトの名無しさん :2007/04/30(月) 14:40:48
それよりもまずテンプレに沿ってMSDN読んで来い

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shell_notifyicon.asp

486 名前:デフォルトの名無しさん :2007/04/30(月) 14:52:16
EnumWindowとかで窓一覧を取得するとあきれるほど非表示ウィンドウだらけだからな。
いまさら一つ増えたところで・・

487 名前:デフォルトの名無しさん :2007/04/30(月) 14:55:10
Winsock の Async の面倒見るのも見えない Window でやりくりしてるな

488 名前:デフォルトの名無しさん :2007/04/30(月) 14:57:17
まあ落ち着けよ

489 名前:デフォルトの名無しさん :2007/04/30(月) 15:06:42
WindowがなくてもHWNDもらう方法はないの?

490 名前:デフォルトの名無しさん :2007/04/30(月) 15:08:13
>>475
やってみた
MainDllないではグローバルインスタンスハンドルにコピーできてるみたいだけど
makehookを呼び出すとNULLになってるみたい

491 名前:デフォルトの名無しさん :2007/04/30(月) 15:09:38
逆に考えるんだ

makehook内で参照してるのがグローバル変数ではないのではないかと考えるんだ

492 名前:デフォルトの名無しさん :2007/04/30(月) 15:13:20
>>476
HWND_DESKTOP名義で登録してHOOK

493 名前:477 :2007/04/30(月) 15:13:39
>>489
メッセージ送信先のウィンドウをデスクトップにでもしておいて
グローバルフックで定義したメッセージを引っ掛ければできなくはない

ウィンドウ作らない分フックにリソース消費するけどねw

494 名前:デフォルトの名無しさん :2007/04/30(月) 15:15:07
久々に綺麗なケコ-ン

495 名前:デフォルトの名無しさん :2007/04/30(月) 15:28:18
ウィンドウズ自体の欠陥ですか

496 名前:デフォルトの名無しさん :2007/04/30(月) 15:35:31
いいえ

497 名前:デフォルトの名無しさん :2007/04/30(月) 16:50:13
                  /    /  . :   ヘ/!    \
                 //   / . /: : ∠、ム|  .    ヽ
                / ィ   .  / :/|: |: :/   ノ: 人:     ハ
                  i/ . : . | .|{‐ |=ヘ{‐'! ` =ナ左、 V:|:   .ハ
                 / | :|: : |: :八 | o ヽ|  ´ o ∨/:   i |
                |:i: : . 、 |{ ヘ! .彡 ,  ミ、  /メ|  . ハ|
                 ヽ|ヽ: : .`| .三´ _____ ̄彡'/ . ://リ
                    > .\ |ニ. 二、,二.ヽ| /: //
                      / : : ハ`` V: : : : :ン∠イ : : ヽ ァハハ八八ノヽノヽノヽノ \ノ \ / \ / \
                  / . : :/ : \ \――/ /: :|: : : . :ヽ
                   /  . : : : :ィ: > ` ̄ イ: : 、 、、: : : : .ハ
                   /  . :/i/ "´ |  ̄ | `^``゙^\:、 : . ハ
                i/ . :/    へ ノ   __ Vニ、   ヽi、:、: i
                 ハ i:/  ∠.... iく__ 彡⌒ソ   > ‐ 、 ヽi、!
                  V / ̄、 ̄\\  ∠ニ -‐_厂 ヽ.  `
                  /  |: レ  ̄ ̄` 厂| ̄,r ̄-  、: |.  i
                /   .|/     厂 | '´     V:  丶
              「 ̄ ̄`ヽ/. : : : . . /  ハ  . : : : : : . V/ ̄`ヽ
              ,ノ二二.ヽ {. : : : : : :∧ヽ/∧: : : : : : : : :} . ニニヽ
            < ̄ィ―- 、ヽV: : : : : :\//: : : : : : : : ノ//. --t、ヽ
             `7    ヽ.ハ: : : : : : : :`´|: : : : : : : : : {彡''´   |/




498 名前:デフォルトの名無しさん :2007/04/30(月) 17:14:45
>>473
そもそもDllMainでuser32.dllの関数を呼び出してはいけない(もちろんMessageBoxも)

499 名前:デフォルトの名無しさん :2007/04/30(月) 17:15:45
>>492-493
そっちのほうがよっぽど気持ち悪いんだが潔癖症の方々はウィンドウを作らないこと自体
が目的化してるんですかね。健康のためなら死んでもいいみたいな。
>>489とか見てると釣りのようにも思えるけど

500 名前:デフォルトの名無しさん :2007/04/30(月) 18:02:07
やってみることに意味があるんだろう
無いけど


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