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


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

Win32API質問箱 Build44
501 名前:デフォルトの名無しさん :2006/07/25(火) 09:13:10
確かSetTimerの数に上限あるから気をつけてね

マルチスレッドでも上限あるけど

どっちがいいかな
場合によるかな

502 名前:デフォルトの名無しさん :2006/07/25(火) 09:19:43
>>494
staticでないメンバ関数には、何らかの方法でthisを渡してやらなければならない(コンパイラが)
Win32 APIは、あらかじめ決められた呼び出し規約を使う。
メンバ関数と、APIの呼び出し規約は違う。

503 名前:デフォルトの名無しさん :2006/07/25(火) 09:54:05
>>489
ありがとう!

504 名前:472 :2006/07/25(火) 11:48:31
>>478
どうもありがとうございます

505 名前:デフォルトの名無しさん :2006/07/25(火) 16:56:35
タイマーつけたら動作不安定になったヽ(`Д´)ノ
SetとKillを繰り返したらダメとかありますか?

506 名前:デフォルトの名無しさん :2006/07/25(火) 17:00:18

質問があります。
インターネットエクスプロラーの画面で、ツールバーとその下のアドレス入力部分
の間に区切り線(横線)がはいってるのですが、どうやって表示しているのですか?
 自分はラインを引いてそれっぽく見えるようにしたのですが・・・
どなたかよろしくお願いします。

507 名前:デフォルトの名無しさん :2006/07/25(火) 18:25:51
>>506
CreateWindow TOOLBARCLASSNAME

ところでwinnyのUI右上あるBBSボタンとなりの▲はapiの機能?

508 名前:デフォルトの名無しさん :2006/07/25(火) 20:01:54
>>507
たぶんVCLのTSpeedButton。
ウィンドウハンドル持たない(VCLによる)独自描画ボタン。

509 名前:デフォルトの名無しさん :2006/07/25(火) 20:15:31
>>508
ふむふむ・・・どうもー

510 名前:デフォルトの名無しさん :2006/07/25(火) 20:57:14
素敵なキーボードランチャを実現するのための
スマートでエレガントな方法を教えてください。
精力は尽くしましたがわかったことは下記の通りです。お願いします。
・任意のキーを使いたいのでRegisterHotKey()は役不足?
・SetWindowsHookEx?WH_KEYBOARD_LL?なにそれ
・AttachThreadInput?なんかほげほげって聞いたけど

511 名前:デフォルトの名無しさん :2006/07/25(火) 21:00:06
役不足・・・

512 名前:デフォルトの名無しさん :2006/07/25(火) 21:31:35
役不足w

513 名前:デフォルトの名無しさん :2006/07/25(火) 21:37:32
DirectInput

514 名前:デフォルトの名無しさん :2006/07/25(火) 21:42:27
おおむね
>・SetWindowsHookEx?WH_KEYBOARD_LL?なにそれ
で間に合うと思う。

515 名前:デフォルトの名無しさん :2006/07/25(火) 23:09:14
役不足・・・(´・ω・`)・・・

516 名前:デフォルトの名無しさん :2006/07/25(火) 23:27:47
ミディアムレア

517 名前:506 :2006/07/26(水) 00:40:58
>>507
ありがとうございます
CreateToolbarEXでは境界線が表示できないということですか?
試しにあしたCreateWindow TOOLBARCLASSNAMEでやってみます。

518 名前:デフォルトの名無しさん :2006/07/26(水) 00:42:53
  _, ,_
( ゚Д゚)

519 名前:デフォルトの名無しさん :2006/07/26(水) 00:48:57
timeSetEvent関数のコールバック関数は割り込みと考えていいの?
カウンタとか参照用変数を作った場合、同期オブジェクトでロックしなくておk?

520 名前:デフォルトの名無しさん :2006/07/26(水) 01:10:10
>>519
別スレッドから呼ばれる。

521 名前:デフォルトの名無しさん :2006/07/26(水) 01:12:08
>>519
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_timeproc.asp
>Applications should not call any system-defined functions from inside a callback function,
>except for PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString.

522 名前:デフォルトの名無しさん :2006/07/26(水) 01:16:32
>>516
焼く不足?

523 名前:510 :2006/07/26(水) 20:50:06
>>514
ありがとう愛してるよ
おおむね間に合ったけどなんかこえーよガタガタ

524 名前:デフォルトの名無しさん :2006/07/26(水) 20:56:48
こわい?何が?

525 名前:デフォルトの名無しさん :2006/07/26(水) 21:49:04
MessageBoxのウインドウ(クライアント領域)に、アプリ側からどこかに処理を滑り込ませて
描画する方法はありませんか?

グローバルのメッセージループをフックするとか…(←適当言ってます)
もし可能であればご教示ください。


526 名前:デフォルトの名無しさん :2006/07/26(水) 21:51:44
ShellExecute()でmailtoを使いsubject等を指定してメール新規作成Windowを開くことはできますが、
添付ファイルを指定することはできないんでしょうか。

527 名前:デフォルトの名無しさん :2006/07/26(水) 21:53:27
mailto に関連づけられたMUA次第じゃね?

528 名前:デフォルトの名無しさん :2006/07/26(水) 21:55:42
OEでできればそれでいいんですが…
やり方あったら教えてくださいませ

529 名前:デフォルトの名無しさん :2006/07/26(水) 22:04:03
>>525
昔ある雑誌にMessageBoxの前でSetTimerつかって、
コールバック関数内でMessageBoxのウィンドウハンドル取得して
アイコンをセットしてるコードが載ってたなぁ。

530 名前:デフォルトの名無しさん :2006/07/27(木) 00:44:02
Becky!だと引数にファイル渡せば、
添付ファイル付きで新規作成になるけど、OEはシラネ。

531 名前:デフォルトの名無しさん :2006/07/27(木) 01:07:25
OEならIEのようにオートメーションでどうにでもできそうな気がする。

532 名前:デフォルトの名無しさん :2006/07/27(木) 08:44:42
SMTP鯖と直接お話しすれば無問題

533 名前:デフォルトの名無しさん :2006/07/27(木) 09:35:48
>>532
素POPはなんとかなるけど SMTP は少しめんどっちい
つか、そこまでいくと メールクライアントになれるじゃん

534 名前:デフォルトの名無しさん :2006/07/27(木) 10:50:54
いまどきのSMTPはTLSだったり認証あったりするからなぁ

535 名前:デフォルトの名無しさん :2006/07/27(木) 11:47:48
超初心者ですんません。

ほぼ最初の最初で、つまづいてます。

GetStockObject(WHITE_BRUSH);
TextOut(hdc, 10, 10, (LPCSTR)str, strlen(str));
とかの関数を使ってMakeしようとすると

undefined reference to `GetStockObject@4'
undefined reference to `TextOutA@20
といわれてエラーになります・・・

もちろん<windows.h>はインクルードしていますし
これらの関数を使わなければ
CreateWindowとかShowWindowは問題なく通り
ウインドウを表示させることはできます。なぜなんでしょ・・・?

536 名前:デフォルトの名無しさん :2006/07/27(木) 12:01:19
>>535
開発環境を書こう

そのエラーはおそらくリンカの吐いてるエラー
gdi32.libをリンカに追加しる

537 名前:デフォルトの名無しさん :2006/07/27(木) 14:11:43
joyGetPosExについてなんですが、
http://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/
のソース例を見ると、32768って言う数字があるのですが、
これはスティックが中心にある時はこの数字が返ってくるって事なんですか?

自分のソースでjoyGetPosExを使ってスティックの情報を取ると100とか200で左右に動かせてしまいます。

ちょっとよく分からないのでこのこといついて詳しく書いてるサイト等あれば教えてください。

538 名前:デフォルトの名無しさん :2006/07/27(木) 16:35:35
>>536
コンパイラはMinGW+MSYS、環境はEclipseCDTです。

-lgdi32オプションつけてコンパイルしたらうまくいきました、ありがとうございました。

539 名前:デフォルトの名無しさん :2006/07/27(木) 19:52:10
SendInput でマウスをドラッグして移動させる時に「MOUSEEVENTF_ABSOLUTE」というパラメータ
を付けているのですが、これを使うと座標単位がピクセル単位ではないのでうまく移動ができません。
ピクセル単位でドラッグできる方法はありますでしょうか?

540 名前:デフォルトの名無しさん :2006/07/27(木) 19:57:02
>>539
自前で変換しる。

でも、なんでマウスの移動の単位は、あんな単位なのだろう。
ピクセル単位だと、何か問題があるのかな。

541 名前:デフォルトの名無しさん :2006/07/27(木) 20:03:09
実行時にウインドウと一緒にコマンドプロンプトみたいなのが表示されてかっこ悪いんだけど、表示させない方法とかある?

542 名前:539 :2006/07/27(木) 20:03:33
変換する基準とかありますか?
65535を解像度で割ったりとかしたけどダメでした。

543 名前:デフォルトの名無しさん :2006/07/27(木) 20:15:12
>>541
ある

544 名前:デフォルトの名無しさん :2006/07/27(木) 20:20:57
教えてくださいおながいします

545 名前:デフォルトの名無しさん :2006/07/27(木) 20:33:24
>>544
キンモー☆

546 名前:デフォルトの名無しさん :2006/07/27(木) 20:53:18
>>544
環境がわからんし、どうやっているのかもわからんのでなんとも。

547 名前:デフォルトの名無しさん :2006/07/27(木) 20:58:27
>>544
コマンドプロンプトのウインドウに壁紙の画像を貼り付ける

548 名前:デフォルトの名無しさん :2006/07/27(木) 21:16:20
それだとちっちゃい壁紙画像が出てきてよけいに変な気が。

549 名前:デフォルトの名無しさん :2006/07/27(木) 21:46:32
>>541
開発環境が分からないので何とも言えないが、コンソールプログラムから
ウィンドウの作成を行っているのかな?。
つまりスタートアップルーチンは、WinMain でななく main だとしたら、
スタートアップルーチンを main から WinMain に換えるのと makefile を
若干修正するだけでプロンプト画面は表示しなくなる。

550 名前:デフォルトの名無しさん :2006/07/27(木) 22:24:25
>>539-540
入力デバイスのキャリブレーションを想定してるからじゃね?
(ペンデバイスや障害者用デバイスなどなど)

SystemParametersInfoになんかあった気がするが・・・
違うかな?

551 名前:デフォルトの名無しさん :2006/07/27(木) 22:45:10
-mwindowsオプション付けてみたらなぜか消えたぜ、おまいらありがとう

552 名前:デフォルトの名無しさん :2006/07/27(木) 23:56:29
WinMainの返り血って決まりとかあるですか?

553 名前:デフォルトの名無しさん :2006/07/28(金) 00:05:06
>>552
http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_winmain.asp

554 名前:デフォルトの名無しさん :2006/07/28(金) 00:25:04
>>551
cygwin|mingwかよ。環境書けやコルァ

555 名前:デフォルトの名無しさん :2006/07/28(金) 00:47:22
>>525
自アプリなら素直にダイアログ作れ
そうじゃなければAdvanced Windows
>>551
ちなみに -mwindows 付けたなら -lgdi32 はいらないはずだ確か

556 名前:デフォルトの名無しさん :2006/07/28(金) 00:54:16
ttp://ruffnex.oc.to/kenji/text/api_hook/
例えば、user32.dllで定義されているMessageBox関数をフックしたい場合、
まずはHook_MessageBoxAとHook_MessageBoxWの2つの置き換え関数を作成します。
どこに作成してもよいのですが、ターゲットのプロセスに注入しないことには
フックできませんから、DLLとして作成しておきます。
そのDLLをターゲットプロセスへ注入すると、DLLは最初に
CreateToolhelp32Snapshotを使ってすべてのモジュールを探索します。
そして、そのモジュールひとつひとつに対してインポートセクションを持っているかどうかを調べ、
持っていたらMessageBoxAのアドレスをHook_MessageBoxAへ、
MessageBoxWのアドレスをHook_MessageBoxWへ書きかえます。
これでMessageBox関数が実行されたら、注入されたDLL内にある
Hook_MessageBoxAとHook_MessageBoxWが呼び出されることになり、
見事APIをフックすることができると考えられます


557 名前:デフォルトの名無しさん :2006/07/28(金) 04:13:11
ダイアログプロシージャにはwindowsx.hの
メッセージクラッカは使えないの?

558 名前:デフォルトの名無しさん :2006/07/28(金) 07:49:23
>>557
ググると見つかるが、一工夫必要。
http://www.google.co.jp/search?q=%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E3%83%97%E3%83%AD%E3%82%B7%E3%83%BC%E3%82%B8%E3%83%A3%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%AF%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC

559 名前:デフォルトの名無しさん :2006/07/28(金) 17:32:14

DIBSectionでBMPの読み方そしえてくれまsんか?


560 名前:デフォルトの名無しさん :2006/07/28(金) 18:04:30
>>558
サンクス
気軽に聞いちゃったけど
ググりを怠るといけませんね

561 名前:デフォルトの名無しさん :2006/07/28(金) 18:33:33
自分のIPを取得するAPIを教えてください

562 名前:デフォルトの名無しさん :2006/07/28(金) 18:41:18
GetMyIP();

563 名前:デフォルトの名無しさん :2006/07/28(金) 18:41:51
あ、すみません。
グローバルIPです。ルーターを使っていても自分のグローバルIPを取得する方法を教えてください

564 名前:デフォルトの名無しさん :2006/07/28(金) 18:43:06
GetGlobalIP();

565 名前:デフォルトの名無しさん :2006/07/28(金) 19:11:07
>>563
UPnPで取れるはずだが、簡単で汎用的な方法は無い。

566 名前:デフォルトの名無しさん :2006/07/28(金) 20:15:10
モニタの省電力周りの事を調べています。具体的には、

1・モニタ省電力モードへ切り替えるAPI(→画面が消え、モニタの電源ランプがスタンバイになる)
2・省電力モードから復帰するAPI(→モニタの電源が入り画面が表示される)
3・電源オプションのプロパティにある「モニタの電源を切る」の設定を変えるAPI

特に1番と2番の情報を教えて下さい。APIの名前だけでも結構です。
解る範囲で検索してもノートパソコンの新情報とかそういうユーザー視点の情報しか発見できませんでした。
2番については、省電力になった後SetCursorをランダム座標で呼び出すテストをやってみましたが案の定だめでしたw

よろしくお願いします。

567 名前:デフォルトの名無しさん :2006/07/28(金) 20:23:20
SC_MONITORPOWER をググってみてごらん>>566

568 名前:デフォルトの名無しさん :2006/07/28(金) 20:28:24
>>567
それぽいのが出てきました。これ専用のAPIなんて無かったのですね。ちょっと試験してみます。
ありがとうございました。

569 名前:デフォルトの名無しさん :2006/07/28(金) 20:30:39
タスクバーのDesk Bandを表示/非表示させるAPIってないんでしょうか。
COMインターフェイスのメソッドでもいいです。

ツールバーのCLSIDを渡すような感じのものを想像してるんですが

570 名前:デフォルトの名無しさん :2006/07/29(土) 03:18:08
修飾子"WINAPI"と"CALLBACK"は両方とも__stadcallと定義されていますが、
どのように使い分けるのでしょうか?

571 名前:デフォルトの名無しさん :2006/07/29(土) 04:07:45
CALLBACKは自分が定義したOSから呼ばれる関数に付ける
WINAPIはOSが定義した自分が呼び出す関数に付けるけど
関数ポインタでも使わない限り自分で書くことはないでしょ

572 名前:デフォルトの名無しさん :2006/07/29(土) 04:21:12
>>571
WinMainがあるじゃん。

573 名前:デフォルトの名無しさん :2006/07/29(土) 06:23:43
DLL

574 名前:デフォルトの名無しさん :2006/07/29(土) 08:52:01
WINAPIはDLLのエクスポート関数に付けてる、俺は。

575 名前:デフォルトの名無しさん :2006/07/29(土) 09:41:35
fh=CreateFile(fnm,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); // ファイルオープン
lpBuf=(LPBYTE)GlobalAlloc(GPTR,GetFileSize(fh,NULL)); // バッファ確保
ReadFile(fh,lpBuf,GetFileSize(fh,NULL),&dummy,NULL);
CloseHandle(fh);

//いろいろポインタ取得
lpInfo=(LPBITMAPINFO)(lpBuf+sizeof(BITMAPFILEHEADER));
lpfh=(LPBITMAPFILEHEADER)lpBuf;

lpBmpInfo=new BITMAPINFO;
CopyMemory(lpBmpInfo,lpInfo,sizeof(BITMAPINFOHEADER));

width=lpInfo->bmiHeader.biWidth;
height=lpInfo->bmiHeader.biHeight;

lpPixel= new DWORD [width*height*3];
CopyMemory(lpPixel, &lpfh->bfOffBits ,sizeof(width*height*3));

//ファイルメモリ バイバイ
GlobalFree(lpBuf);
/* DIBSection作成 */
hbmpBMP = CreateDIBSection(NULL, lpBmpInfo, DIB_RGB_COLORS, (void **)(&lpPixel), NULL, 0);
/* DIBSection用メモリデバイスコンテキスト作成 */
hdcBMP = CreateCompatibleDC(hdc);
/* DIBSectionのHBITMAPをメモリデバイスコンテキストに選択 */
SelectObject(hdcBMP, hbmpBMP);
うまくいかない・・・


576 名前:デフォルトの名無しさん :2006/07/29(土) 11:02:13
lpPixelはCreateDIBSectionが確保する。だから、確保する必要ない。
(つーか、DWORD * width * height * 3って96bitビットマップかよ!)
だから、CopyMemoryはCreateDIBSectionの後で。

lpfh->bfOffBitsは、ファイルの先頭からデータまでのバイト数だから、
&lpfh->bfOffBitsではなく、lpBuf+lpfh->bfOffBitsだね。

sizeof(width*height*3)って、width*height*3のsizeを求めてもしゃーないやろ。
それにビットマップは横1ラインが4バイト境界で有る必要がある。
計算式は('A`)マンドクセ

577 名前:デフォルトの名無しさん :2006/07/29(土) 11:29:38
>>576
thx。
修正しめみます。


578 名前:デフォルトの名無しさん :2006/07/29(土) 12:24:54
一部を白く
for (y=0;y<44;y++)
{
for (x=0;x<width;x++)
{
*( lpPixel+x*3+ y*width )=255;//B
*( lpPixel+x*3+1+y*width )=255;//G
*( lpPixel+x*3+2+y*width )=255;//R
}
}

<(T◇T)>わぁああああ!
http://gamdev.org/up/img/6849.gif


579 名前:デフォルトの名無しさん :2006/07/29(土) 12:26:06
間違えた
*( lpPixel+x*3+ y*width*3 )=255;//B
*( lpPixel+x*3+1+y*width*3 )=255;//G
*( lpPixel+x*3+2+y*width*3 )=255;//R


580 名前:デフォルトの名無しさん :2006/07/29(土) 12:41:57
ビットマップは上下反転している。
lpPixelがLPDWORDのままでないかい?
x*3+y*widthバイトではなく、(x*3+y*width)*sizeof(DWORD)バイト進んだ位置をさすことになるぞ。
代入もDWORD単位だから、255ということは0x000000FFが書き込まれる。

width*3ではなく、4バイト境界でそろえた数値をかける必要がある。

581 名前:デフォルトの名無しさん :2006/07/29(土) 13:26:30
kita---------------------!!!

LPDWORD lpPixel

LPBYTE lpPixel

に変更したら直りました
さんきゅ〜!


582 名前:デフォルトの名無しさん :2006/07/29(土) 14:07:23
CharNextWの存在価値を教えてください
普通に「++」でインクリメントしても、
今のところ期待するような結果が返ってきます

583 名前:デフォルトの名無しさん :2006/07/29(土) 14:12:15
>>569ですが、その後もいろいろ調べた結果、
不可能と判断しました。失礼しました〜


584 名前:デフォルトの名無しさん :2006/07/29(土) 14:16:24
>>582
サロゲートとか考慮してんじゃないの?

585 名前:デフォルトの名無しさん :2006/07/29(土) 14:34:42
>>582
CharNextWが無かったら、CharNextを使ってるソースをUnicodeビルドできないじゃん。
いちいちインクリメントに書き直せとでも?

586 名前:デフォルトの名無しさん :2006/07/29(土) 16:39:19
>>572
WinMainにはAPIENTRYという専用の修飾子がある

587 名前:デフォルトの名無しさん :2006/07/29(土) 17:03:26
ちょっと教えて

ウィンドウで「常に最前面に表示」と「常に最前面に表示を解除」の切り替えをやりたいのです。
@選択されたウィンドウが「常に最前面に表示」なら「常に最前面に表示を解除」
A選択されたウィンドウが「常に最前面に表示」でないなら「常に最前面に表示」
て感じ
設定するのはSetWindowPosでうまくいってるんだけど、
現在の状態(最前面?そうでない?)がどっちなのか判断できません。
どうやったらいいですか?

588 名前:デフォルトの名無しさん :2006/07/29(土) 17:07:17
iReturnStatus = GetWindowLong(hWndBuf, GWL_EXSTYLE);
if (iReturnStatus & WS_EX_TOPMOST)

でできまちた
ごめんちゃい

589 名前:デフォルトの名無しさん :2006/07/29(土) 19:56:30

質問があります。
エディットコントロールで特定の入力だけを処理するには(例えばリターンのみ)ウィンドウのクラス化をすると
簡単にできたのですが、コンボボックスで同じことをやるにはどうすればよいですか?キー入力の横取りができません
どなたか教えてください。

590 名前:デフォルトの名無しさん :2006/07/29(土) 20:00:39
>>589
コンボボックスのエディットコントロールをサブクラス化する。

591 名前:589 :2006/07/29(土) 20:40:14
>>590
GetComboBoxInfoを使用してエディットボックスのハンドルを収得
してエディットボックスのサブクラス化ですね。ありがとうございました

しかし、エディットコントロールとエディットボックスは同じと
考えて問題ないのでしょうか・・・

592 名前:デフォルトの名無しさん :2006/07/29(土) 20:56:50
タスクバーにあるタスクリストに表示されている、特定の(自分以外のプロセスの)エントリーをタスクリストから消す方法というのは、あるのでしょうか?
どなたか教えてください。


593 名前:デフォルトの名無しさん :2006/07/29(土) 21:11:40
ITaskbarList

594 名前:592 :2006/07/29(土) 21:36:28
おぉ。
素早い返信ありがとうございます。
早速、
http://www.runan.net/program/tips/sdk_10_ITaskbarList.shtml
とかを見ながらためしてみようと思います。


595 名前:デフォルトの名無しさん :2006/07/29(土) 22:12:23
よろしかったら教えて下さい。
よくゲームなどで情報を表示している小窓みたいなので
(ネトゲのステータス表示してる子窓とかチャットウィンドウみたいなの)
そういうのでスキンを使ったみたいに見た目をカスタマイズしてるのって
どうやってやっているんですか?
自力で窓作るのも無駄な気がするし…

596 名前:デフォルトの名無しさん :2006/07/29(土) 22:18:26
ゲームのGUIはほぼゼロから手作り
DXUTのGUIはスキンサポートしてるみたいだけど

597 名前:デフォルトの名無しさん :2006/07/29(土) 22:20:06
>>595
板違い

ゲ製作技術
ttp://pc8.2ch.net/gamedev/

598 名前:デフォルトの名無しさん :2006/07/29(土) 22:32:44
>>596
ゲーム作ってるわけじゃなかったのであまり深く考えていませんでしたが
ちょっとそっち方面で調べてみますありがとう


599 名前:デフォルトの名無しさん :2006/07/29(土) 22:38:38
うぃんどうりーじょんのことがききたかったのかもしれん

600 名前:デフォルトの名無しさん :2006/07/29(土) 23:33:40
これのことじゃないの?
ttp://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp


601 名前:デフォルトの名無しさん :2006/07/29(土) 23:42:41
>>595
ウィンドウ枠含め全て自前で描画し、WM_NCHITTESTを適切に処理してあげるとか?

602 名前:デフォルトの名無しさん :2006/07/30(日) 06:25:48
>>598
htmlでメニュー作る感じに画像で作る、丸いとことかさ

603 名前:デフォルトの名無しさん :2006/07/30(日) 09:59:44
エディットボックスに入力した文字をファイルに保存したり
ファイルから読み込んだ文字をエディットボックスに表示したりしたいんだけど、どうすればいいの?

604 名前:デフォルトの名無しさん :2006/07/30(日) 10:15:34
>>603
Edit_GetText, Edit_SetText
その前にWindowsプログラム関連の書籍か数多く出版されているので、
それらの本でプログラムの基礎を学ぶことをお勧めする。

605 名前:デフォルトの名無しさん :2006/07/30(日) 10:55:25
>>604
ありがとう
今までDirectXとかゲームに近い方ばかりやってたからWinAPI本持ってないや
今度見てみる

606 名前:デフォルトの名無しさん :2006/07/30(日) 11:12:01
速攻ゲーム開発かスゲー

607 名前:デフォルトの名無しさん :2006/07/30(日) 15:35:23
ウィンドウを生成・管理するクラス作りたいんだけど、
そこにウィンドウプロシージャを埋め込むにはどうしたらいい?

608 名前:デフォルトの名無しさん :2006/07/30(日) 16:02:02
>>607
staticにする。

609 名前:デフォルトの名無しさん :2006/07/30(日) 18:21:58
ごめん言い方が悪かった
ウィンドウを生成・管理するクラスWindowに
メンバ関数としてウィンドウプロシージャを組み込むにはどうしたらいい?
WNDCLASSEX構造体にプロシージャなメンバ関数WndProc()へのアドレスを設定しようとしてもエラーで入らない

宣言
(LRESULT CALLBACK) Window::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

問題箇所
WNDCLASSEX wcex;
wcex.lpfnWndProc= this.WndProc;

エラー内容
error C2228: '.WndProc' の左側はクラス、構造体、共用体でなければなりません
型は 'Window *const ' です。

610 名前:デフォルトの名無しさん :2006/07/30(日) 18:23:18
C++の基本からやり直せ。

611 名前:デフォルトの名無しさん :2006/07/30(日) 18:38:36
>>608でFAなのに

612 名前:デフォルトの名無しさん :2006/07/30(日) 18:45:17
>>609
staticなウィンドウプロシージャから個々のクラスの
ウィンドウプロシージャを呼べばいい。
これは色んなところで議論されてるから
ググばすぐ見つかると思う。

613 名前:デフォルトの名無しさん :2006/07/30(日) 19:09:25
>>610-612
スマソ、理解力不足だった
ググってみたところそれらしいのがあったんでその通りにしてみたら問題なくビルドできた
ttp://qwerty.s2.xrea.com/XC2CCCAB82FBBB2B9CDA4CBA4B7A4C6A4CFA4A4A4B1A4CAA4A4XWindowsSDKXA5ECA5B7A5D42FX2.xhtml

>>608
サンクス

614 名前:デフォルトの名無しさん :2006/07/30(日) 19:19:18
ある数字配列を作製し、テキストで出力するプログラムを作っているのですが、
コンパイル後、実行すると「問題が発生したため・・・」のウィンドウが出てしまいます。
どうも次のレスに記述するソースの「問題の行」と示したところがまずいようなんです。
(そこの記述を消すとエラーが起こらない)
なぜまずいのでしょうか??

615 名前:614 :2006/07/30(日) 19:19:27
#include <windows.h>
#include <math.h>

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow) {
 int bittbl[ 1024 ];
 int n;
 int n2;
 int n_harf;
 HANDLE hFile;
 DWORD dwWriteSize;
 PSTR header = TEXT( "int bittbl[] = {\n" );
 PSTR bit;
 PSTR footer = TEXT( "};" );
 hFile = CreateFile( "bittbl.h" , GENERIC_WRITE , 0 , NULL , CREATE_ALWAYS ,  FILE_ATTRIBUTE_NORMAL , NULL );
 WriteFile( hFile , header , lstrlen( header ) , &dwWriteSize , NULL );
//数列bittbl[n]作製
〜省略〜
//数列をテキストへ出力
 for( n=0;n<1024;n++ ){
  wsprintf( bit , "\t%d ,\n" , bittbl[ n ] ); ←問題の行
  WriteFile( hFile , bit , lstrlen( bit ) , &dwWriteSize , NULL );
 }
 WriteFile( hFile , footer , lstrlen( footer ) , &dwWriteSize , NULL );
 CloseHandle( hFile );

 return 0;
}

616 名前:デフォルトの名無しさん :2006/07/30(日) 19:29:07
bitのメモリはどこで確保してるんだ?
APIより先にC言語の基本からやり直せ

617 名前:デフォルトの名無しさん :2006/07/30(日) 19:42:37
物凄い初心者な質問なんだけど
ウィンドプロシージャで最後にDefWindowProcに渡すようになってる所で
switch文でdefault使って他はreturn 0とかやる場合とウィンドプロシージャの最後に直接returnでやる場合と
色々見かけるような気がするんですが、これはどっちでも変わらないんでしょうか?

switch文の各処理が終わった後の処理が変わるような気がするんですが
違いとかあるんでしょうか?

618 名前:デフォルトの名無しさん :2006/07/30(日) 19:47:48
MSDNに
「メッセージを処理したときは0を返せ」って書いてるだろ?
裏を返すとメッセージを処理しなかったときはDefWindowProcを返せってこと。
大半のメッセージについてはDefWindowProcも0を返すだけだから
違いが見えにくいかもしれないけど

619 名前:デフォルトの名無しさん :2006/07/30(日) 19:47:53
>>617
言ってる通りなんじゃね?

620 名前:614 :2006/07/30(日) 20:01:05
>>616
とくにメモリ確保しなくても同じようなことが他のプログラムではできたのですが・・・
仕方ないので、そのプログラムを改造して数列をテキスト出力しました。

621 名前:デフォルトの名無しさん :2006/07/30(日) 20:05:50
>>618-619
各メッセージ処理が終わった後に0返さずさらにDefWindowProcしてるのが
あったような気がしたのでふと疑問に思ったのですが、勘違いかもしれないですね。
何か変に考えすぎていたのかも
でも、DefWindowProcが大抵0返すのなら、上記のような感じでも
無駄っぽい気はするけど、そんな問題ないって感じなのかな
ありがとうございました。


622 名前:デフォルトの名無しさん :2006/07/30(日) 20:11:07
>>621
自分で処理した後デフォルト処理したい時もあるだろ

623 名前:デフォルトの名無しさん :2006/07/30(日) 20:20:13
>>622
確かにそういわれれば…
疑問が解消されましたありがとう

624 名前:デフォルトの名無しさん :2006/07/30(日) 20:33:37
>>620
>とくにメモリ確保しなくても同じようなことが他のプログラムではできたのですが・・・
こええなおいw 問題の行で確保してないメモリ領域に書き込んでるぞ。

625 名前:614 :2006/07/30(日) 20:40:52
>>624
そのプログラム、ちょっといじると同様のエラーが起こるようになりました!
PSTR bit の宣言時に PSTR bit = TEXT( "\t%1024 ,\n" ) とすれば問題なくなりましたが、
ちょっとかっこわるい気がします。
他にメモリを確保する方法を教えてください。

626 名前:デフォルトの名無しさん :2006/07/30(日) 20:44:54
えー

627 名前:デフォルトの名無しさん :2006/07/30(日) 20:51:03
>>625
だからC言語の基本からやり直せ

628 名前:デフォルトの名無しさん :2006/07/30(日) 21:18:19
>>625
PSTR bit; を TCHAR bit[65536]; に書き換える。
そんなにいらないとか言われてもしらん。

629 名前:デフォルトの名無しさん :2006/07/30(日) 21:25:30
そんなにいらない

630 名前:デフォルトの名無しさん :2006/07/30(日) 21:35:47
>>628
> PSTR bit の宣言時に PSTR bit = TEXT( "\t%1024 ,\n" ) とすれば問題なくなりましたが、
> ちょっとかっこわるい気がします。
とかほざいてる奴に解決策だけ教えてもかえって有害な気がするけどなあ

631 名前:614 :2006/07/30(日) 21:43:01
>>628
できました!
ありがとうございました!

632 名前:デフォルトの名無しさん :2006/07/30(日) 21:57:54
既に子ウィンドウ(WS_CHILD)として作成してしまったウィンドウを、
親ウィンドウから切り離して、強制的にメインウィンドウにさせることは可能でしょうか?


633 名前:632 :2006/07/30(日) 21:58:37
>>628
そんなにいらない

634 名前:デフォルトの名無しさん :2006/07/30(日) 22:04:55
ワロス

635 名前:デフォルトの名無しさん :2006/07/30(日) 22:29:12
614やばいよ、やばすぎるよ…。


636 名前:デフォルトの名無しさん :2006/07/30(日) 22:36:47
>>632
SetParent(NULL)したらSetWindowLongでWS_CHILDを外してWS_POPUPを付けるようにとMSDNが言っている。

637 名前:632 :2006/07/30(日) 23:10:41
>>636
できるんですか!?ものすごく裏技チックなので無理かと思ってました。
ありがとうございます。MSDNで公式に発表されてる処理だとは。ワロス

638 名前:デフォルトの名無しさん :2006/07/31(月) 03:00:16
タスクトレイのアイコンにバルーンチップ出すようにしたんですけど
このときポコっていう通知音が邪魔くさいんです。なんとか消すようにできませんか?

639 名前:デフォルトの名無しさん :2006/07/31(月) 03:10:08
win2000,VC6です

メモリの使用についてテストしたくて以下のコード書いたのですが
実行後タスクマネージャでメモリ使用量を確認しても640kbしか消費してません
60MB消費されると思っていたのですが
どうしてですか?

#include <windows.h>
#include <cstdio>
int main() {
PVOID mem = VirtualAlloc(NULL,60000*1024,MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
 if (mem != NULL) printf("ok");
 scanf("%s",mem);
}

640 名前:デフォルトの名無しさん :2006/07/31(月) 03:24:31
>>639
VirtualAllocでぐぐったら一番上に出てきたが?
質問する前に自分で調べような。

641 名前:639 :2006/07/31(月) 03:30:06
>>640
ごめん。そのページ読んでたんだけどよくわからなかったんだ


コミット済み このページには物理記憶域が割り当てられていて、
アクセス保護コードによってアクセスは制御されています。
このページの読み取りまたは書き込みを最初に試みた場合にのみ、
システムは各コミット済みページを初期化し、物理メモリへロードします。


つまり、コミットしてても実際にそこへ何か書き込まなければメモリは実際には
確保されないということですか?

642 名前:639 :2006/07/31(月) 03:37:58
わかった!!ありがとう>>640

以下のコードだとタスクマネージャのメモリ使用量は
636kbでした

PVOID mem = VirtualAlloc(NULL,60000*1024,MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE);

これを以下にするとメモリ使用量は640kbになりました

PVOID mem = VirtualAlloc(NULL,60000*1024,MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
mem = "aiueo";

これはaiue0\0という6バイトの文字列がコミットした領域に書き込まれて、
その4kbのページングファイル一つがメモリに読み込まれたということですね

で、以下のようにすればちゃんとメモリ使用量が60MBになりました

PVOID mem = VirtualAlloc(NULL,60000*1024,MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
FillMemory(mem, 60000*1024,0);

やっと、寝れる

643 名前:デフォルトの名無しさん :2006/07/31(月) 03:47:31
PVOID型の宣言を調べようと
windef.hを見てたんだけど
LPVOIDはあるけどPVOIDがありません

PVOIDはどのヘッダファイルで定義されているのでしょうか?


644 名前:デフォルトの名無しさん :2006/07/31(月) 03:56:52
つgrep

645 名前:デフォルトの名無しさん :2006/07/31(月) 08:39:37
プログラム起動中に
スクリーンセイバーを作動をさせないようにする関数はありますか?


646 名前:デフォルトの名無しさん :2006/07/31(月) 08:43:15
>>645
ない。
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B403844

647 名前:643 :2006/07/31(月) 09:22:38
>>644
windef.hからインクルードされてる
winnt.hにありましたどうもです

648 名前:デフォルトの名無しさん :2006/07/31(月) 09:26:26
>>638
コンパネのサウンドで無音に設定汁

649 名前:デフォルトの名無しさん :2006/07/31(月) 10:34:25
>>646

禿しくありがとうございますた

650 名前:デフォルトの名無しさん :2006/07/31(月) 10:40:53
きも

651 名前:デフォルトの名無しさん :2006/07/31(月) 12:48:11
PCVOIDが用意されていないのが残念

652 名前:645 :2006/07/31(月) 13:40:25
>>646
ありがとうございます。
できました


653 名前:デフォルトの名無しさん :2006/07/31(月) 13:57:10
初めまして。
一つ聞きたいことがあったので、皆さんに質問させていただきます。
ダイアログボックス内のエディットボックスにおいて、例えばボタン1を押すとエディットボックス内に「OK」と表示されるとします。
次にボタン2を押したときに、前の「OK」を消さずに
    OK
    NG
と改行して表示させたいのですが、どのようにすればよいのでしょうか?
普通にSetDlgItemTextでやると前のを上書きして消えてしまうし、かといって違う方法が思いつかなくて困っています。
ネットでもMFCでかかれたものはのっているのですが、APIで書かれているものがないのでこちらにて質問させていただきました。
お手数をおかけいたしますが、よろしくお願いいたします。

654 名前:デフォルトの名無しさん :2006/07/31(月) 14:04:15
>>653
EM_SETSEL
EM_REPLACESEL

655 名前:デフォルトの名無しさん :2006/07/31(月) 14:32:58
>>648
むむ、てことはシステム通知音をプログラム側でいじるようにすればいいのか。
おk−調べてみるぜ

656 名前:デフォルトの名無しさん :2006/07/31(月) 14:43:56
>>655
本気で言ってるのかw

657 名前:デフォルトの名無しさん :2006/07/31(月) 14:55:36
>>653
GetWindowText
lstrcat
SetWindowText

658 名前:デフォルトの名無しさん :2006/07/31(月) 15:32:08
SendMessage関数はプロシージャを直接呼び出し、処理を終えてから制御を返すとありますが、

送信先のウィンドウがアクティブのときは確かにそうなのですが、
送信先のウィンドウが非アクティブの時は処理をすることなく即座に制御が返ってきます。

これはなぜですか?

659 名前:デフォルトの名無しさん :2006/07/31(月) 15:47:39
・どんなメッセージを送ったのか
・非アクティブの時処理をしてないことをどうやって確認したのか

660 名前:658 :2006/07/31(月) 16:09:40
・どんなメッセージを送ったのか
 ユーザー定義メッセージ
  #define WM_USER_ESC_FLAG (WM_USER + 0)
  SendMessage(hMainWnd, WM_USER_ESC_FLAG, 0, 0);
 です。

・非アクティブの時処理をしてないことをどうやって確認したのか
 ビープ音で確認しました。
  switch (msg) {
    case WM_USER_ESC_FLAG:
      MessageBeep(-1);


661 名前:658 :2006/07/31(月) 16:11:33
ああ、ちなみに送り主はフック.DLLです。

662 名前:デフォルトの名無しさん :2006/07/31(月) 16:15:12
>>661
非アクティブなプロセスはMessageBeepで音を出せない。
とかいうことはないのか?

663 名前:デフォルトの名無しさん :2006/07/31(月) 16:19:19
>>662
だせます

664 名前:デフォルトの名無しさん :2006/07/31(月) 17:46:20
ファイルにデバッグログを出力してもう少し詳しくトレースしてみたら?
MessageBeepとかちょttあやしい

665 名前:デフォルトの名無しさん :2006/07/31(月) 18:33:53
WM_USER+n はコントロールメッセージとかぶるけど大丈夫?

666 名前:デフォルトの名無しさん :2006/07/31(月) 19:04:57
使って良いのはWM_APP以降だわな

667 名前:デフォルトの名無しさん :2006/07/31(月) 21:33:17
まぎらわしいねん

668 名前:デフォルトの名無しさん :2006/07/31(月) 23:45:32
WM_APP以降ってコントロールメッセージとかぶることにMicrosoftが言い出してから
後付けで言い出したんだけどな

669 名前:デフォルトの名無しさん :2006/08/01(火) 00:24:49
日本語でどうぞ。

670 名前:デフォルトの名無しさん :2006/08/01(火) 08:55:32

先ほどスクリーンセイバーについて質問しました者ですが
勘違いをしていました。

事情があってスタンバイ等の設定ができないので
プログラム起動中は スタンバイ || 休止状態を
させないプログラムを作りたいのです。

しかしスクリーンセイバーを止めてもスタンバイ || 休止状態に入って
しまいました。(無知でした)

スタンバイ等を抑止する方法はあるのでしょうか?

デスクトップ等に SendMessage 等でキーコードを送信したり
マウスカーソルの位置を定期的に変えたりと試しましたがどれも
失敗です。今は電池をスペースキーに置いて席を離れています。



671 名前:デフォルトの名無しさん :2006/08/01(火) 09:01:06
>>670
WM_POWERBROADCASTのPBT_APMQUERYSUSPENDに対してBROADCAST_QUERY_DENYを返す。

672 名前:デフォルトの名無しさん :2006/08/01(火) 09:10:23
>今は電池をスペースキーに置いて席を離れています
ワロス

673 名前:デフォルトの名無しさん :2006/08/01(火) 10:34:09
ユーザーが任意の数だけビットマップを読み込めるプログラムを作成しているのですが
その数だけメモリDCを増やさなければいけません。
いくつまで増やしていいものでしょうか?
お願いします。

674 名前:デフォルトの名無しさん :2006/08/01(火) 10:50:19
確保できなくなるまで

675 名前:673 :2006/08/01(火) 11:09:09
>>674
メモリDCってかなり重いんじゃないですか?

676 名前:デフォルトの名無しさん :2006/08/01(火) 11:25:14
途中で勝手に質問を変えるな

677 名前:デフォルトの名無しさん :2006/08/01(火) 11:28:14
どこまでCPUに負担かけていいんですか?とか聞いてるようなもの

678 名前:デフォルトの名無しさん :2006/08/01(火) 11:29:43
ユーザーが任意のテキストファイルを読み込めるプログラムを作成しているのですが
その数だけメモリを増やさなければいけません。
いくつまで増やしていいものでしょうか?
お願いします。

679 名前:デフォルトの名無しさん :2006/08/01(火) 11:30:22
確保できなくなるまで

680 名前:デフォルトの名無しさん :2006/08/01(火) 11:32:44
物理的な限界
論理的な限界
のいずれかに達するまで

681 名前:673 :2006/08/01(火) 11:43:54
すみませんでしたつД`)

682 名前:デフォルトの名無しさん :2006/08/01(火) 13:19:40

アニメ BEST100
ttp://www.animedepot.biz/DVDlist/2005years_best.htm

1位
http://www.animedepot.biz/DVDlist/title/KVDVD0542.htm
2位
http://www.animedepot.biz/DVDlist/title/KVDVD0518.htm
3位
http://www.animedepot.biz/DVDlist/title/A18D2492.htm
4位
http://www.animedepot.biz/DVDlist/title/KVDVD0533.htm
5位
http://www.animedepot.biz/DVDlist/title/A18D2480.htm
6位
http://www.animedepot.biz/DVDlist/title/KVDVD0512.htm
7位
http://www.animedepot.biz/DVDlist/title/KVDVD0502.htm
8位
http://www.animedepot.biz/DVDlist/title/KVDVD0521.htm
9位
http://www.animedepot.biz/DVDlist/title/KVDVD0505.htm
10位
http://www.animedepot.biz/DVDlist/title/KVDVD0508.htm

683 名前:デフォルトの名無しさん :2006/08/01(火) 15:29:43
>>582
今更だけど、WCHARはUTF-16だから、
CharNextWはサロゲートペアのことも考えてくれるのではないか?

684 名前:デフォルトの名無しさん :2006/08/01(火) 19:32:14
何にせよ内部実装を隠蔽してくれるという観点から
大いに意味アリだよね

685 名前:デフォルトの名無しさん :2006/08/01(火) 23:35:15
質問です。
WinAPIで何かのキーを押したときに何か違うキーも押したことにするってできますか?

Kを押したら一緒にF12も押したことにしてくれるみたいな。

686 名前:デフォルトの名無しさん :2006/08/01(火) 23:35:35
Windows 2000くらいからはサロゲートを考慮してくれそう

687 名前:デフォルトの名無しさん :2006/08/02(水) 00:03:54
分割ウィンドウを作ろうと思っているのですが、
どういう実装にするのが普通なんでしょうか?
自作は最後の手段として、ヘッダーコントロールで
代用しようと思ったら、その子にしたコントロール専用の
通知メッセージが届かなくなり、使い物になりませんでした。
やはりMFCのを使うのが無難なのかな・・・

688 名前:デフォルトの名無しさん :2006/08/02(水) 00:24:44
>>687
MFCかWTLをお勧めする。

689 名前:デフォルトの名無しさん :2006/08/02(水) 01:10:36
わかるよそのMFC使いたくない気持ちつД`)

690 名前:687 :2006/08/02(水) 08:20:13
>>688
やはりそれが普通ですか。
とりあえずWTLの方は未経験なので
使ってみたいと思います。
thxでした。

691 名前:デフォルトの名無しさん :2006/08/02(水) 15:51:31
こんにちは。ちょっと質問させてください。

ある2つのプログラムをメンテナンスしています。
仮に「pg-1.exe」と「pg-2.exe」とします。
pg-1、pg-2は、ともにほぼ常時稼動するプログラムです。
pg-1はpg-2からCreateProcessで起動され、pg-1は起動された直後に
ウィンドウのタイトルの文字列をファイルに記述します。
ユーザーはpg-2上のボタンを押すことでpg-1を再起動することができます。
pg-2はボタンが押されたら、ファイルに記述された文字列を元にFindWindowし、そのウィンドウに
WM_CLOSEをPostします。終了したことを確認してから再度CreateProcessする仕組みです。

pg-1にバグが見つかって修正した場合、新しいpg-1.exeに入れ替える際の作業手順は次の形です。
1. 実行中のpg-1.exeのファイル名をpg-1-bk.exeに変更。
2. 新しいpg-1.exeを同じフォルダにコピー。
3. pg-2上のボタンを押して再起動。

この結果pg-1.exeは終了されるのですが、その後起動されるのがたまになぜかpg-1-bk.exeだったりします。
しかし、pg-2.exe内でのCreateProcessでは第一引数、第二引数で固定的に「pg-1.exe」を
指定しているのです。

私の頭で考えつくのは、システムのディスクキャッシュみたいなものがあって、
そこの内容が実際のファイル名の変更についていってなくて、新しいpg-1.exeを起動したつもりが
元のpg-1.exe(現pg-1-bk.exe)が起動されたのか?とかぐらいなんですが
入れ替えたpg-1.exeが起動されるようにするにはどうしたらいいんでしょうか?

普段はVB6erであんまり慣れてないので、お手柔らかにお願いします。m(_ _)m

692 名前:デフォルトの名無しさん :2006/08/02(水) 16:05:00
>>691
> 1. 実行中のpg-1.exeのファイル名をpg-1-bk.exeに変更。
> 2. 新しいpg-1.exeを同じフォルダにコピー。

はどうやってるの?
pg-1.exeが動作中でファイルがロックされてて失敗してないか?

693 名前:デフォルトの名無しさん :2006/08/02(水) 16:27:48
>>692

今のところエクスプローラ上でファイル名変更、コピー出来てます。
入れ替え後のファイルのプロパティを表示すると、バージョンも変わっているので、
入れ替わっていると思います。

694 名前:658 :2006/08/02(水) 16:37:58
原因がわかりました

誤:
#pragma data_seg(".sharedata")
HHOOK g_hHookWnd_gm = 0;
#pragma data_seg()
HWND hMainWnd = 0;

正:
#pragma data_seg(".sharedata")
HHOOK g_hHookWnd_gm = 0;
HWND hMainWnd = 0;
#pragma data_seg()

こういうオチでした…
メッセージを送るときはWindowHandleも共用にしておかないとダメなんですね

695 名前:デフォルトの名無しさん :2006/08/02(水) 17:06:25
ビットマップの左上の1ピクセルの色を取得したいのですが、
GetPixelじゃメモリ上にあるカラーを取得できません。
ピクセルビットを読み込む他の方法があれば教えてください。
お願いします。

696 名前:デフォルトの名無しさん :2006/08/02(水) 17:12:46
DCをメモリ上のものにすれば良いのでは?

697 名前:695 :2006/08/02(水) 21:14:10
あ、ホントだ。すみませんでした。ありがとうございます。

698 名前:デフォルトの名無しさん :2006/08/03(木) 00:50:36
age

699 名前:デフォルトの名無しさん :2006/08/03(木) 04:19:07
>>694
最新のMSDN(英語版)を見ると、CallNextHookExの第1引数はNULLを渡せばいいことになってる。
だから、g_hHookWnd_gmを共用にしなくてもいいかも。

700 名前:デフォルトの名無しさん :2006/08/04(金) 08:46:13
仮想キーの自動入力プログラムってどんな感じでやればいいんですかね

701 名前:デフォルトの名無しさん :2006/08/04(金) 09:13:01
キーダウンのメッセージを投げる

702 名前:デフォルトの名無しさん :2006/08/04(金) 10:39:16
GetForegroundWindowでウインドウハンドルを取得して、
SetWindowPosでそのウインドウの"常に前面表示”を切り替えるプログラムを作ったんですが、
PhotoshopやLunascape等アプリのウインドウだとそのウインドウがアクティブになってる時しか利きません。
メモ帳だといつでも利くんですが、なんでですか?

703 名前:デフォルトの名無しさん :2006/08/04(金) 10:55:28
http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_getforegroundwindow.aspをよく見ろ

704 名前:デフォルトの名無しさん :2006/08/04(金) 17:22:41
質問です。
LoadLibraryでDLLをロードしてGetProcAddressで関数を呼び出しています。
この関数から呼出し元のプログラム中の別の関数を呼び出すことは可能ですか?
コンパイラはMinGW(gcc)を使っています。
VC++なら可能、という回答でもありがたいです。
よろしくお願いいたします。

705 名前:デフォルトの名無しさん :2006/08/04(金) 17:48:47
>>704
関数ポインタを渡せば出来そうだけど、
DLLが外部に依存したらDLLの意味がないだろ。

706 名前:デフォルトの名無しさん :2006/08/04(金) 18:45:24
>>703
どうもありがとうございます。
NULLってなくなるってことですよね?解決策はありませんでしょうか?

707 名前:デフォルトの名無しさん :2006/08/04(金) 19:30:09
>>705
コールバックさせたいのかも

708 名前:704 :2006/08/04(金) 19:59:16
>>707
ご推察の通り、コールバックです。
問題のDLLは本体に対するプラグインでして、依存しても差し支えありません。

Unix/Linux では関数ポインタを使わなくても呼出し元のコールバック関数が
呼び出せているので、Windows でも同じようにできないかなと考えています。

引続きよろしくお願いいたします。

709 名前:デフォルトの名無しさん :2006/08/04(金) 20:10:25
>>708
Unixの勝手は知らないが、Windowsは関数ポインタを渡すのが一番手っ取り早いだろ。

710 名前:デフォルトの名無しさん :2006/08/04(金) 20:12:45
>>708
設計がおかしい。

711 名前:デフォルトの名無しさん :2006/08/04(金) 20:21:28
>>708
DLLにしろEXEモジュールにしろ、その中の各関数は本体モジュールの
ベースアドレスからの相対アドレスで管理されているから、エクスポート
されていない関数の場合は、その関数名からその関数が存在するアドレス
を求めるのは無理なので、コールバック呼び出しは無理だと思う。
"GetProcAddress" は、エクスポートテーブルからそのAPIの位置を特定
している訳だし。

メインソース内のサブルーチンをエクスポート宣言できれば、多分、その
モジュールのベースアドレスから関数のアドレス位置を特定できると思う。

712 名前:デフォルトの名無しさん :2006/08/04(金) 20:22:59
>>708
Susieプラグインなんかはアプリ側からDLLへ関数ポインタ渡してる(画像展開の途中経過表示など)

713 名前:デフォルトの名無しさん :2006/08/04(金) 20:25:22
普通はDLLにコールバック関数を登録するI/Fを入れとくもんだが

714 名前:デフォルトの名無しさん :2006/08/04(金) 21:16:48
>>706
SetWindowPosしたいだけなら普通FindWindowを使ってハンドルを取得する

715 名前:706 :2006/08/04(金) 22:04:53
>>714
レスありがとうございます。
FindWindow使い方がよく分からなかったのでGetForegroundWindowにしたんですが、
この二つで取得できるハンドルは同じウインドウでも違うものなんですか?

716 名前:デフォルトの名無しさん :2006/08/04(金) 22:07:21
んなわきゃーない

717 名前:704 :2006/08/04(金) 22:29:44
皆さんレスありがとうございます。

>>709
確かに。ただ、DLL側から呼びたい本体側のサブルーチンの数が多いのと、
Unixでは関数ポインタを使う必要がないので、より簡単な方法があれば
知りたいと考えました。

>>711
本体側のサブルーチンにエクスポート宣言を入れることは可能です。

しかし、得られるものが関数ポインタということは、やはりDLL側での
本体のサブルーチンの普通の関数呼出しの形では呼べないということですね。

どうやらDLL周りの設計をUnix版から大きく変えないといけないみたいです。
お騒がせしました。ありがとうございました。

718 名前:704 :2006/08/04(金) 22:31:57
「DLL側では本体のサブルーチンを普通の関数呼出しの形で呼ぶことはできない」の誤りでした。

719 名前:デフォルトの名無しさん :2006/08/04(金) 23:09:34
確かexeからエクスポートすることもできたはずだが
HSPなんかが使ってたような

720 名前:デフォルトの名無しさん :2006/08/04(金) 23:40:45
出来るよ。
DLLもEXEも大雑把に言えば、エントリポイントが違うだけで、同じモジュールなんだし。


721 名前:デフォルトの名無しさん :2006/08/04(金) 23:42:31
Unixでは関数ポインタを使わなくてすむと言うのは、一体どういうことなのか気になる。

722 名前:デフォルトの名無しさん :2006/08/05(土) 00:18:12
Windowsで言うなら
「exeからエクスポートした関数にインポートライブラリでDLLからリンクする」
みたいなことだと勝手にエスパーして>>719を書いてみたわけだが

723 名前:デフォルトの名無しさん :2006/08/05(土) 08:40:06
OllyDbgでもプラグイン用に使ってるよ>Export

724 名前:704 :2006/08/05(土) 10:06:15
内容:
>>719-720
ありがとうございます。「インポートライブラリ」という概念が分かっていませんでした。
本体側の関数をエクスポートしてインポートライブラリを作り、
プラグインの構築時にリンクすることで普通の関数呼び出しの形で呼び出せました。
試作したプログラムを添付してまとめに代えます。本当にありがとうございました。

/* 本体:gcc -o test1 test1.c -Wl,--out-implib,callback.a */
#include <windows.h>
#include <stdio.h>
const char *dlerror(void) {
static char last_error[1024];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), last_error, sizeof(last_error) / sizeof(char), NULL);
return last_error;
}
typedef int (*plugin_func_t)(int, int);
static int *x;
int main(int argc, char *argv[]){
HINSTANCE handle;
plugin_func_t func;
int a = 1, b = 2;
handle = LoadLibrary("foo.dll");
if (!handle) { printf("LoadLibrary: %s", dlerror()); return -1; }
func = (plugin_func_t)GetProcAddress(handle, "plugin_func");
if (!func) { printf("GetProcAddress: %s", dlerror()); return -1; }
x = (int *)malloc(sizeof(int));
printf("plugin_func(%d, %d) => %d\nx = %d\n", a, b, (*func)(a, b), *x);
return FreeLibrary(handle);
}

725 名前:704( :2006/08/05(土) 10:07:32
__declspec(dllexport) int /* __stdcall */ callback_func(int a, int b) {
printf("callback_func: a = %d, b = %d\n", a, b);
*x = a + b;
return *x;
}

/* プラグイン:gcc -shared -Wl,--kill-at -o foo.dll foo.c callback.a */
__declspec(dllimport) int /* __stdcall */ callback_func(int, int);
__declspec(dllexport) int /* __stdcall */ plugin_func(int a, int b) {
printf("plugin_func: a = %d, b = %d\n", a, b);
return callback_func(a, b);
}

726 名前:デフォルトの名無しさん :2006/08/05(土) 10:17:07
if (!GetMessageW(&msg, hWnd, 0, 0))

どうしてこのコードでWM_QUITか調べられるですか?

727 名前:デフォルトの名無しさん :2006/08/05(土) 10:22:54
>>726
それはWM_QUITかどうかを判定してるわけじゃない。
GetMessageの説明をちゃんと読みましょう。

728 名前:デフォルトの名無しさん :2006/08/05(土) 10:23:37
WM_QUITの値って0なのか?
分かりにくいからQUITで判定した方がいいと思うが

729 名前:デフォルトの名無しさん :2006/08/05(土) 10:27:47
WM_QUIT メッセージを取得した場合、0 が返ります。

730 名前:デフォルトの名無しさん :2006/08/05(土) 10:29:51
なるほど

731 名前:デフォルトの名無しさん :2006/08/05(土) 11:59:15
>>726
そこhWndを引数にする必要はあるか?

732 名前:デフォルトの名無しさん :2006/08/05(土) 12:03:00
SetWindowPosの解説に
「ウィンドウを最前面ウィンドウにするには、hWndInsertAfterパラメータで、
HWND_TOPMOSTフラグをセットしたうえでSWP_NOZORDERフラグをクリアするか…」
とあるんですが、SWP_NOZORDERフラグってどうやってクリアするんですか?

733 名前:デフォルトの名無しさん :2006/08/05(土) 12:10:12
>>732
普通にSWP_SHOWWINDOW入れてSetForegroundWindowすればいいんじゃね

734 名前:732 :2006/08/05(土) 12:26:06
>>733
他のウインドウで作業してる時に、
別のウインドウを非アクティブのまま操作したいんです。

735 名前:デフォルトの名無しさん :2006/08/05(土) 14:07:07
それはSetWindowPosとなんか関係があるのか?

736 名前:デフォルトの名無しさん :2006/08/05(土) 14:09:54
エスパーじゃないからどういう状況でどんな操作がしたいのかよくわからん

737 名前:デフォルトの名無しさん :2006/08/05(土) 16:14:47
フラグの操作も知らんで今までよくやってこれたな

738 名前:デフォルトの名無しさん :2006/08/05(土) 16:26:51
どうせネトゲのツールだろ

739 名前:デフォルトの名無しさん :2006/08/05(土) 16:38:20
#include <wincrypt.h>

してるのにその中で定義されてる

HCRYPTPROV

とかが未定義エラーになるのですが
どうすれば良いのでしょうか?

740 名前:デフォルトの名無しさん :2006/08/05(土) 16:44:09
wincrypt.hの中にif文みたいなのがあるだろ

741 名前:732 :2006/08/05(土) 19:54:51
>>735-738
マウスを使わずにキーボードで非アクティブなウインドウを、
常に手前表示、解除して後ろに表示と切り替えたいんです。
プログラム作るの初めてなんでとっかかりでも教えてもらえると嬉しい。

742 名前:デフォルトの名無しさん :2006/08/05(土) 20:10:02
なんでプログラム作るの初めての人がこんなところにいるんだか…
とりあえず↓嫁

猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/

743 名前:tttttった :2006/08/05(土) 20:47:00
J#でAPIどうやって使うの?
MIDIならしたいんだけど、VB.net ならわかるんだけど
J#は 書き方がわからない。

744 名前:732 :2006/08/05(土) 21:03:35
>>742
意地悪せずに教えて欲しいのです。ググりまくってここまでできたんですが、
repeat
p1_p = p1
getkey p1,120
if (p1=1) & (p1_p=0){ if a=0 {SetWindowPos hwndact,-1,0,0,0,0,1 or 2 or 16
a=1 }
else {SetWindowPos hwndact,-2,0,0,0,0,1 or 2 or 16
SetWindowPos hwndact,1,0,0,0,0,1 or 2 or 16
a=0}}
wait 2
loop
操作するウインドウがアクティブになってないと反応しません。
メモ帳のウインドウだと非アクティブでも反応するんですが…
ちなみにプログラム言語はHSPです。

745 名前:デフォルトの名無しさん :2006/08/05(土) 21:10:15
>>743
J/Directでぐぐれ

746 名前:デフォルトの名無しさん :2006/08/05(土) 21:45:58
>>744
>意地悪
( ゚Д゚) ポカーン

747 名前:tttttった :2006/08/05(土) 22:03:11
ぐぐったんだが わからんのだ。
J#のことがかかれてるいいHPないかな?

748 名前:デフォルトの名無しさん :2006/08/05(土) 22:59:00
>>732
その質問はスレ違い。
ビット反転してAND取ればいいんだが、正直それが分からないレベルで
このスレに来られても非常に困る。

749 名前:デフォルトの名無しさん :2006/08/06(日) 00:03:40
ビット反転してAND取るとオールクリアされちゃうんじゃw
でもなんにしても>>732はスレ違いだな。

750 名前:デフォルトの名無しさん :2006/08/06(日) 00:04:51
>>749
されません


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