Win32API質問箱 Build59
at TECH
1:デフォルトの名無しさん
07/11/10 22:39:56
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(URLリンク(msdn2.microsoft.com))の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2:デフォルトの名無しさん
07/11/10 22:40:26
58 スレリンク(tech板)
57 スレリンク(tech板)
56 スレリンク(tech板)
55 スレリンク(tech板)
54 スレリンク(tech板)
53 スレリンク(tech板)
52 スレリンク(tech板)
51 スレリンク(tech板)
50 スレリンク(tech板)
49 スレリンク(tech板)
48 スレリンク(tech板)
47 スレリンク(tech板)
46 スレリンク(tech板)
45 スレリンク(tech板)
44 スレリンク(tech板)
43 スレリンク(tech板)
42 スレリンク(tech板)
41 スレリンク(tech板)
40 スレリンク(tech板)
39 スレリンク(tech板)
38 スレリンク(tech板)
37 スレリンク(tech板)
36 スレリンク(tech板)
35 スレリンク(tech板)
34 スレリンク(tech板)
33 スレリンク(tech板)
32 スレリンク(tech板)
31 スレリンク(tech板)
3:デフォルトの名無しさん
07/11/10 22:40:39
30 スレリンク(tech板)
29 スレリンク(tech板)
28 スレリンク(tech板)
27 スレリンク(tech板)
26 スレリンク(tech板)
25 スレリンク(tech板)
24 スレリンク(tech板)
23 スレリンク(tech板)
22 スレリンク(tech板)
21 スレリンク(tech板)
20 スレリンク(tech板)
19 スレリンク(tech板)
18 スレリンク(tech板)
17 スレリンク(tech板)
16 スレリンク(tech板)★
15 スレリンク(tech板)★
14 URLリンク(pc5.2ch.net)
13 URLリンク(pc5.2ch.net)
12 URLリンク(pc5.2ch.net)
11 URLリンク(pc5.2ch.net)
10 URLリンク(pc5.2ch.net)
9 URLリンク(pc5.2ch.net)
8 URLリンク(pc5.2ch.net)
7 URLリンク(pc3.2ch.net)
6 URLリンク(pc3.2ch.net)
5 URLリンク(pc3.2ch.net)
4 URLリンク(pc3.2ch.net)
3 URLリンク(pc.2ch.net)
2 URLリンク(pc.2ch.net)
1 URLリンク(pc.2ch.net)
4:デフォルトの名無しさん
07/11/10 22:40:49
- MSDN ホームページ
URLリンク(msdn.microsoft.com)
URLリンク(msdn2.microsoft.com)
URLリンク(www.microsoft.com)
- MSDN ライブラリ
URLリンク(msdn.microsoft.com)
- MSDN 2 ライブラリ
URLリンク(msdn2.microsoft.com)
- 猫でもわかるプログラミング
URLリンク(www.kumei.ne.jp)
- Google
URLリンク(www.google.com)
- MSDN ライブラリ 2007 年 6 月版 VisualR Studio 2005 Service Pack 1 ドキュメントを含む
URLリンク(www.microsoft.com)
- Platform SDK Update
(for Windows Vista)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
(Windows(R) Server 2003 R2 Platform SDK Full Download)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
- Microsoft(R) Windows(R) Software Development Kit for Windows Vista and .NET Framework 3.0 Runtime Components
URLリンク(www.microsoft.com)
5:デフォルトの名無しさん
07/11/10 22:41:02
- Win32 API入門
URLリンク(wisdom.sakura.ne.jp)
- Win32 プログラミング入門
URLリンク(www7.plala.or.jp)
- Advanced Windows (書籍)
URLリンク(www.amazon.co.jp)
-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
URLリンク(www.2chsearch.info)
URLリンク(makimo.to)
6:デフォルトの名無しさん
07/11/10 22:41:15
以上
7:デフォルトの名無しさん
07/11/11 02:03:53
>>1
乙
8:デフォルトの名無しさん
07/11/11 07:44:49
前スレ最後の方で返り血の不統一が話題だったけど、
MS内部では、マック好みが多いってホント?
9:デフォルトの名無しさん
07/11/11 07:56:37
ロバート・フリップはiPod派だよ
10:デフォルトの名無しさん
07/11/12 00:54:12
質問です
キーボードからの入力をフックして、仮想キーコードを置き換えるプログラムを作ろう思い、
SetWindowsHookEx()でWH_KEYBOARD_LLにフックをかけて、
フック関数側ではlParamからKBDLLHOOKSTRUCT構造体にアクセスし、仮想キーコードを変更するようにしたのですが、
このプログラムを起動した状態でメモ帳に何か文字を入力しても、キーコードが変更されず打った文字がそのまま出てきてしまいました。
フック関数からMessageBox()表示させることはできたので、フック関数自体は呼び出されている様です。
もしかするとWH_KEYBOARD_LLでは仮想キーコードの取得はできても置換はできないのでしょうか?
11:デフォルトの名無しさん
07/11/12 01:05:24
>もしかするとWH_KEYBOARD_LLでは仮想キーコードの取得はできても置換はできないのでしょうか?
概ねそんな感じ
WH_KEYBOARD_LLで送られてきたキー情報を書き換えても
メッセージキューのメッセージには影響しない
12:デフォルトの名無しさん
07/11/12 01:08:52
そういうのってデバドラ書かないと無理じゃなかった?
13:デフォルトの名無しさん
07/11/12 01:17:53
いや、置き換えだけならWH_WNDPROCでWM_KEY***とか見張ってればおk
目的のキーのWM_KEY***が来たら、仮想キーコード書き換えて
PostMessageしなおせばいい
14:デフォルトの名無しさん
07/11/12 01:23:46
解説
GetMsgProc フックプロシージャは、メッセージの検討と変更を行えます。このフックプロシージャがシステムへ制御を返した後、GetMessage または PeekMessage 関数は、そのメッセージを変更結果と共に、最初にその関数を呼び出したアプリケーションへ渡します。
アプリケーションがこのフックプロシージャをインストールするには、WH_GETMESSAGE フックタイプと GetMsgProc フックプロシージャへのポインタを指定して、SetWindowsHookEx 関数を呼び出します。
15:デフォルトの名無しさん
07/11/12 01:25:45
つまりはMSDN嫁。と
16:10
07/11/12 01:37:29
素早い返信ありがとうございます
なるほど、やはり取得しかできないメッセージを捕まえてたんですね…
沢山キーワードを頂けたので調べながら作り直してみたいと思います
17:デフォルトの名無しさん
07/11/12 06:31:31
>>13-14
その方法ってGetKeyState/GetAsyncKeyStateとかも置き換えられたっけ?
18:デフォルトの名無しさん
07/11/12 08:14:15
置き換えるって言うか…
各スレッドはキーの状態を保持したキーボードマップを持ってて
GetKeyStateはそこからキー情報を取ってくる
キーボードマップはスレッドがGetMessageかPeekMessageした時に更新される
で、WH_GETMESSAGEはメッセージがキューから取得される直前にフックを呼ぶ
後はどうなるか分かるよな
19:デフォルトの名無しさん
07/11/12 10:33:55
どのスレで聞くべきか迷いましたがここで質問させていただきます。
他のアプリケーションのウインドウを画像として取得するにはどうしたらよいのでしょうか?
20:デフォルトの名無しさん
07/11/12 10:45:10
HDC様を取得してみよう
21:デフォルトの名無しさん
07/11/12 11:02:25
なんだそれw
22:デフォルトの名無しさん
07/11/12 11:48:56
ビットマップのHDC様といっしょにBitBltでGo!
23:デフォルトの名無しさん
07/11/12 12:17:01
XP以降ならPrintWindow
2000以下なら方法は無し
24:デフォルトの名無しさん
07/11/12 13:24:47
SDKって上書きしていいの?
25:デフォルトの名無しさん
07/11/12 13:29:45
意味が分からん
インストールの話なら一度アンインストールしとけ
26:デフォルトの名無しさん
07/11/12 13:49:12
というかSDKといってもいくつかあるからな
Windows SDK 6.0なのか、Platform SDK最新版(今Server2003用か?)か
27:デフォルトの名無しさん
07/11/12 14:02:37
>>24
OSから入れ直しに決まってんだろ。
28:デフォルトの名無しさん
07/11/12 15:43:36
WinAPIでツールボタンを使ったウィンドウを作ろうと思ったのですが、
comctl32.dll、バージョン 5.82.2900.2982、エラー発生アドレス 0x0001d465
のようなエラーが出ます。WindowsXPHome,コンパイラはMinGWのgcc3.4.5,リソースコンパイラはwindres2.17.50です。ソースは下のようになっています。
*WndProc.c
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam){
HINSTANCE hInst;
HWND hToolBar;
TBBUTTON tbb[]={{0,IDM_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},省略{5,IDM_TOOL5,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0}};
switch(message){
case WM_CREATE:
InitCommonControls();
hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
hToolBar=CreateToolbarEx(hwnd,WS_CHILD|WS_VISIBLE,ID_TOOLBAR,6,hInst,ID_TOOLBMP,tbb,6,0,0,16,16,sizeof(TBBUTTON));
return 0;
省略
*resource.h
#define ID_TOOLBAR 100
#define ID_TOOLBMP 101
#define IDM_OPEN 102
省略
#define IDM_TOOL5 107
*resource.rc
#include "resource.h"
ID_TOOLBMP BITMAP DISCARDABLE "control.bmp"
また、このページを参考にしたのですがまったく同じように作っても同じエラーが出ました。
URLリンク(wisdom.sakura.ne.jp)
環境が問題なのでしょうか。だとしたら解決策などはあるのでしょうか。
ご教授願います。
29:デフォルトの名無しさん
07/11/12 15:53:52
とりあえずデバッガで追いかけてみたりしたかしら?
30:デフォルトの名無しさん
07/11/12 16:45:25
>>29
すいません、試していませんでした。今gdbでやってみたら
Program received signal SIGSEGV, Segmentation fault.
0x5ab7d465 in ImageList_AddMasked () from C:\WINDOWS\system32\comctl32.dll
と出ました。ImageList_AddMaskedを調べるとビットマップのイメージマスク関連のようですがそこまでしかわかりませんでした。
WindowProcにブレークポイントを設定し、hToolBarの内容を見てみると0xffffffffでしたがやはりこれが問題でしょうか?
いろいろ考え試してみましたがどうにもわかりません。ご教授願います。
31:デフォルトの名無しさん
07/11/12 16:50:02
>hToolBarの内容を見てみると0xffffffffでした
INVALID_HANDLE_VALUEだろそれw
作成失敗してるw
32:デフォルトの名無しさん
07/11/12 16:58:29
ちがう。
CreateToolbarExの失敗時の戻り値はNULL。
でも0xFFFFFFFFが有効なハンドルって事はないから・・・。
33:デフォルトの名無しさん
07/11/12 17:12:18
おそらくImageList_AddMaskedの中で
無効なビットマップハンドル使ってるんだろうな
試してないがGetWindowLongに失敗してない?
WM_CREATEってまだウィンドウ作成されてないからhWndって無効なハンドルの気が
で、無効ハンドルのせいでインスタンスハンドル取れない→イメージリソースが取れない。と
試しにGetModuleHandle(NULL);にしてみろ
34:デフォルトの名無しさん
07/11/12 17:15:20
WM_CREATEでなら、
CREATEPARAMS const* pcs = (CREATEPARAMS const*)lParam;として、
pcs->hInstanceとすればインスタンスハンドルが取れる。
35:デフォルトの名無しさん
07/11/12 17:15:51
CREATESTRUCTだったorz
36:デフォルトの名無しさん
07/11/12 17:31:30
>>28です。
>>33-35
すべて試しましたが結果は同じでした。
hInstのインスタンスハンドルは$2=0x7c953288で取れているようです。
また、hwndのハンドルも取れています。
コードをすべてどこかにアップロードしてしまったほうが解決が早いでしょうか…?
37:デフォルトの名無しさん
07/11/12 17:35:01
結局CreateToolbarExって成功してるの?
38:デフォルトの名無しさん
07/11/12 17:37:40
>>WM_CREATEってまだウィンドウ作成されてないからhWndって無効なハンドルの気が
どんだけw
39:デフォルトの名無しさん
07/11/12 17:49:40
>>1
乙
40:19
07/11/12 18:01:53
>>20-23
PrintWindowでいきたいと思います。
ありがとうございました。
41:デフォルトの名無しさん
07/11/12 18:07:46
>>36
hInstが0x7c953288ってどう考えてもおかしいだろ
つーかこの程度のバグを解決できないスキルならMinGWなんて使わずVC使えよ
42:デフォルトの名無しさん
07/11/12 18:23:58
ビットマップでボタン作れますか?
マウスがボタンに重なったら、ボタンに使われているビットマップを変更する等の処理もしたいのですが、
43:デフォルトの名無しさん
07/11/12 19:16:21
>>42
ボタンにビットマップ張ったらいいんでは?
44:デフォルトの名無しさん
07/11/12 19:27:00
どうやって張るんですかね?
本等にもあまり載っていなくて苦難してます。
45:デフォルトの名無しさん
07/11/12 19:31:40
質問です。
プログラムを動かそうと考えているマシンにはプリント用のネットワーク出力ポートがいくつかありますが、
EnumPortsを呼ぶとPORT_INFO_2構造体にはそれぞれ
pMonitorName : TCPMON.DLL
pDescription : Standard TCP/IP Port
fPortType : 11
という値が入ります。
これらについて個々のIPアドレスを知る方法はありますでしょうか?
46:デフォルトの名無しさん
07/11/12 20:00:15
>>44
普通に
ボタン ビットマップ
でググれば出てくるが
47:デフォルトの名無しさん
07/11/12 20:13:40
>>46
ググッてきます!!!
48:デフォルトの名無しさん
07/11/12 20:43:43
>>28です。
resource.rcに#include "resource.h"の記述をしないとなぜかウィンドウ自体は表示されます。
ですがビットマップイメージがボタンに張られていない状態です。
当たり前といえばそうなのですが、この情報から何かわかることはあるでしょうか?
たびたびすいません、ご教授願います。
>>37
プログラムが異常終了してしまうので成功していません。
>>41
おかしいのですか…どのようにおかしいのかわかりますでしょうか?
ソースをすべてアップロードしてみました。たびたびすいません、どこが悪いのかご教授願います。
>>28に書いたソースよりいくらかいじったので違う点がありますが基本的に同じです。
URLリンク(www.dotup.org)
49:デフォルトの名無しさん
07/11/12 21:44:20
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆【一番クリックした国が優勝】参加者求ム!☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
イギリス人天才プログラマが運営する前代未聞の無料ブラウザゲーム、URLリンク(clickclickclick.com)
ただひたすらクリックし、国別の総クリック数を世界中で競い合う!
究極にバカバカしくそして意味がなく、ひたすら時間の無駄でなんの得にもならない、だがそれが(・∀・)イイ!
ライバルはハンガリー、そして台湾!! GAME2から参戦し、現在GAME27開催中!
VIPで発祥し現在2ch全土から結集したクリック兵達で日本チームは戦っている!
意味のない事に全力を傾ける、それが2ちゃんねるクオリティ!!
独自のクリックツール開発競争も熱く、各国のプログラマが全力で優秀な兵器開発をしている!!
日本の技術力の高さを世界に見せつけてやろうぜ!
プログラマ、Flashゲーム製作者、動画職人、AA職人、絵師、DJ、wiki編集blog編集者、データ分析者etcも募集中!
ツール放置参加もできるので、PCのスペックに自身のある奴、CPUに空きのある奴、時間が余ってる奴もぜひ参加してくれ!
本スレッド
【簡単多重】一番クリックした国が優勝【8砲門】
スレリンク(news4vip板)l50
※落ちているときはここから1発検索
URLリンク(www.clickjapan.jp)
日本チームの有志によるまとめサイトポータル
URLリンク(www.clickjapan.jp)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
50:デフォルトの名無しさん
07/11/12 22:32:12
>>28
> リソースコンパイラはwindres2.17.50です。
これは、リソースに日本語が入っているとダメだったような…
ひょっとして、そっち関係とか。
51:デフォルトの名無しさん
07/11/12 22:32:28
>>48
だからVC使えと(ry
デバッガだけでもVCを使う価値は十分にあると思うが、どうしてもMinGWを使わなければならない理由でもあるのか?
52:デフォルトの名無しさん
07/11/12 22:37:23
WindowsはZIPを解凍するAPIを標準で持っているんでしょうか?
また、あるとしたらどのバージョンからなんでしょうか。
53:デフォルトの名無しさん
07/11/12 22:41:39
ねーよ
54:デフォルトの名無しさん
07/11/12 22:47:42
>>48
ビットマップが24ビットだからじゃね?
256色以下にしてみ
55:デフォルトの名無しさん
07/11/12 22:50:18
パソコンの画面をキャプチャーしてメモリ内に格納したいのですが、
GetDCでデスクトップのデバイスコンテキストを取得し、
GetPixelで1ピクセルずつ取得する方法より、効率の良い方法は何かあるでしょうか?
56:デフォルトの名無しさん
07/11/12 22:52:53
DIB
57:デフォルトの名無しさん
07/11/12 23:13:33
>>52-53
ZIPフォルダを実現する関係上、ZIPファイルはシェルフォルダとして読み書きできる。
Me/XPから標準搭載だが、98ではPlus!に付いてきたはず。
また、2000でもMeからDLLを持ってくれば使える。
ようするにWindowsのバージョンなんて当てにしないで、
実際に試してみて成功すればOKという方針で行け。
58:デフォルトの名無しさん
07/11/12 23:18:59
>>55
BitBlt
59:デフォルトの名無しさん
07/11/12 23:19:51
>>57
OS再インスコしたら真っ先にregsvr32 /u zipfldr.dllなんだが
そんな不確かな物に頼るぐらいなら普通にunzip32やzlibでも使えばいい
60:デフォルトの名無しさん
07/11/12 23:20:33
>>55
1ピクセルごとじゃなくて普通にBitBltじゃだめなのか
61:デフォルトの名無しさん
07/11/13 09:29:25
>>59
自分で機能切ってるヤツまで知ったこっちゃねーだろ・・・
62:デフォルトの名無しさん
07/11/13 09:32:21
delphiのぐだすれで質問したらすれ違いと言われたのでここに来ました。
WindowsXPのアクティベーションとかで使用しているようなハードウェアハッシュを
自前のプログラムでも使用したいのですが
どうやったら取得できますでしょうか。
すれ違いでしたら誘導願います。
63:デフォルトの名無しさん
07/11/13 10:50:43
>>61
そもそもなぜ圧縮フォルダをプログラムから直接利用する必要があるのかサッパリなんだが
外部DLL不要、世界最小のZIP解凍ソフト!とか作りたいのかねぇ
64:デフォルトの名無しさん
07/11/13 12:04:19
>>28です。
>>54
本当にありがとうございます。解決しました。
65:デフォルトの名無しさん
07/11/13 14:08:15
>>63
お前、とことん読解力ないな
66:デフォルトの名無しさん
07/11/13 14:21:45
( ´,_ゝ`)プッ
67:デフォルトの名無しさん
07/11/13 14:42:28
言語問わずWin32APIが呼び出せるインタプリタ環境ってありますか?
68:デフォルトの名無しさん
07/11/13 14:49:17
Perl
69:デフォルトの名無しさん
07/11/13 15:23:49
>>68
ありがとうございます、調べてみます
70:デフォルトの名無しさん
07/11/13 16:22:08
PowerShell
71:デフォルトの名無しさん
07/11/13 17:05:04
>>70
こんなものもあるんですね、不勉強ですみません
72:デフォルトの名無しさん
07/11/13 22:34:14
APIとか一寸試したい時に、そういうのが欲しいとちょっと思わなくもないが、
結局Cや、GUI絡みでもMFC使えば簡単に試せるからなあ。
73:デフォルトの名無しさん
07/11/14 01:04:06
>>56
ありがとうございます。調べて見ます
>>60
>>58
取得した画面をファイルに出力したりネットワークで送信したりしたいのですが、
BitBltだと、出来ませんでした
74:デフォルトの名無しさん
07/11/14 01:08:18
そういう場合はGetDIBitsで検索
75:デフォルトの名無しさん
07/11/14 06:05:51
>>72
環境勝手にいじれない(非開発の)PCではAPI使うのにofficeのVBAしかなかったりするんだよ…
MSはPowerShell を優先度の高い更新に含めやがれ
あるいは会社のPCをすべて2008にしてください
76:デフォルトの名無しさん
07/11/14 06:23:03
.NETは結局XPに標準搭載されなかったんだっけか
77:デフォルトの名無しさん
07/11/14 10:13:29
標準搭載しなくていいよ
78:デフォルトの名無しさん
07/11/14 11:30:13
ファイルだの日時をコピーもしくは変更するAPIを教えてください
79:デフォルトの名無しさん
07/11/14 12:09:27
SetFileTime
GetFileTime
80:デフォルトの名無しさん
07/11/14 12:09:41
日本語でおk
81:78
07/11/14 13:12:30
フォルダでした。
ところでこれってFATでも機能するのでしょうか?
82:デフォルトの名無しさん
07/11/14 13:33:53
解説ぐらい読んで来い
URLリンク(msdn.microsoft.com)
83:デフォルトの名無しさん
07/11/14 14:56:30
SendMessageで書き直したいのですが、どのように書き直せばよいのか教えてください。
(VB2005です)↓
'キーコード送信
Dim DownUp As Integer = 0
Dim Down As Integer = 1
Dim Up As Integer = 2
Private Sub KBD(ByVal KEY_CODE As Byte, ByVal 状態 As Integer, ByVal ms As Integer)
Sleep(ms)
If 状態 = 1 Then
Call keybd_event(KEY_CODE, 0, 0, 0)
ElseIf 状態 = 2 Then
Call keybd_event(KEY_CODE, 0, &H2, 0)
ElseIf 状態 = 0 Then
Call keybd_event(KEY_CODE, 0, 0, 0)
Call keybd_event(KEY_CODE, 0, &H2, 0)
Else
End If
End Sub
84:デフォルトの名無しさん
07/11/14 16:09:01
keybd_eventがやってることはSendMessageじゃエミュレートできないと思うんだが
85:デフォルトの名無しさん
07/11/14 16:11:05
場合による
86:デフォルトの名無しさん
07/11/14 16:14:41
キーイベントはポストだろ
87:デフォルトの名無しさん
07/11/14 16:16:27
ポストだとどんな感じですか?
88:デフォルトの名無しさん
07/11/14 16:19:42
マニュアル嫁
89:デフォルトの名無しさん
07/11/14 17:31:09
ポストはポストでも、マルチポストだろ
90:デフォルトの名無しさん
07/11/14 21:50:10
いろんな方が質問されている内容ですがうまくいかないので質問させてください。
WS_EX_LAYERED、SetLayeredWindowAttributes、LWA_COLORKEY、IDB_CHRISTALについて
「定義されていない識別子です。」というエラーでコンパイルできません。
ソースは以下のサイトを見ながら書いています。
URLリンク(www.kumei.ne.jp)
環境はVC++6.0、OSはWindowsXP SP2です。
やってみたこと
・ServicePack6 の適用
・Windows Server 2003 SP1 Platform SDK の PSDK-x86.exeをダウンロードしてインストール
→C:\Program Files\Microsoft Platform SDK\Bin\Orca.Msi を実行
・ソースに#include<WinUser.h> を追記
対処法がありましたら教えていただきたいです。
91:デフォルトの名無しさん
07/11/14 21:56:14
VC++のインクルードディレクトリの設定を変えろ。
新しいPlatform SDKのインクルードディレクトリを指すように。
winuser.hは昔も今もwindows.hの中でインクルードされるから、
自分でインクルードを明記する必要はない。
92:デフォルトの名無しさん
07/11/14 22:33:26
VC++のディレクトリとPlatFormSDKのディレクトリで
階層構造が多少違うようなのですが、、、、
で、適当にやったらインクルードファイルがオープンできませんってなりました・・・。(;つД`)
メニューのツール -> オプション -> ディレクトリ タブ の中の設定を変更したんですが違いました?
93:90=92
07/11/14 22:42:22
WS_EX_LAYERED については警告はでなくなりましたが
下記エラーが出ます。インクルードディレクトリの指定がマズイのでしょうか?
error LNK2001: 外部シンボル "__imp__SetLayeredWindowAttributes@16" は未解決です
94:デフォルトの名無しさん
07/11/14 22:43:10
_WIN32_WINNTとかWINVERとかじゃね?
95:デフォルトの名無しさん
07/11/14 22:52:14
>>75
ExcelあるならスクリプトからExecuteExcel4MacroでCALL Win32API
96:デフォルトの名無しさん
07/11/14 23:05:20
>>93
インクルードパス同様、ライブラリパスも設定する必要があるぞ。
97:90=92=93
07/11/14 23:05:55
>>94
ソース冒頭で
#define _WIN32_WINNT 0x0500
を指定しています。
WINVERというのが良くわかりませんが
#define WINVER 0x0400
と指定したところではエラーの内容は変わらずでした。
98:デフォルトの名無しさん
07/11/14 23:12:44
>>97
つーかVC6で使えるSDKの最終バージョンって2003年2月ぐらいの奴じゃなかったっけ?
一応2003SDKとかも使えなくも無いがリンクエラー出ることあるからやめといた方がいいと思うぞ
99:デフォルトの名無しさん
07/11/14 23:16:43
>>93
ライブラリのパス
100:90=92=93=97
07/11/14 23:29:14
できました━━(゚∀゚)━━!!!!。
ありがとうございました。
101:90=92=93=97=100
07/11/14 23:44:52
>>98
URLリンク(www.microsoft.com)
↑
これには ”Date Published: 5/2/2005 ”とあるようです。
このSDKはあんまり薦められないってことですか?
今回はこれでないと動かない代物だったので仕方ないですが
必要なければ使わないほうが良いのでしょうか?
102:デフォルトの名無しさん
07/11/14 23:46:11
タスクトレイのアイコン上でマウスホイールで操作したときに処理をすることを
考えているんですが、タスクトレイのアイコン上でマウスホイールを操作しても、
WM_MOUSEWHEELがとんできません。
WM_MOUSEWHEELをフックしても、タスクトレイのどのアイコン上なのか
識別する方法がわかりません。
NOTIFYICONDATAのhWndとかuIDを判別する方法ありませんか?
103:デフォルトの名無しさん
07/11/14 23:46:54
今ならWindowsSDKだけで十分なような気も
104:デフォルトの名無しさん
07/11/14 23:49:38
>>102
状況がよくわからんけど・・・
タスクトレイから通知が来たときのLPARAMを見てみる
105:デフォルトの名無しさん
07/11/14 23:52:04
あ、違うか
どのアイコンか判定したかったらShell_NotifyIconのAPIフックからしないと駄目な気が
通知メッセージはユーザー定義だからフックできんし
WM_MOUSEWHEELは普通にタスクトレイが受け取ってるはず
106:102
07/11/15 00:13:14
>>105
レスどうもです。
えとですね。
自分のアプリで登録しているアイコンなんですよ。
タスクトレイのアイコン上で操作したときに、
例えば左クリックならばWM_LBUTTONDOWNは来るんですが、
マウスホイール操作のWM_MOUSEWHEELは来ないんです。
なので、WM_MOUSEWHEELをフックして処理しようかと思ったのですが、
自分のアプリで登録しているタスクトレイのアイコン上であるかどうかの
判別ってどうするんだ?と困っているところなのです。
107:デフォルトの名無しさん
07/11/15 01:24:41
>>101
そのページに書いてあるでしょ
>This SDK does not support working with Microsoft Visual C/C++®, 6.0 as support for VC 6.0 has ended.
>The last SDK that will work with VC 6.0 is the February 2003 Edition, you can order a CD on the fulfillment site.
2003年2月版でもXPSP1ぐらいまではサポートしてるので普通に使う分には困らないと思う
108:デフォルトの名無しさん
07/11/15 04:44:07
>>81
NT系ならFATでも使える。まだ9xサポートしてるのか?
109:デフォルトの名無しさん
07/11/15 06:19:56
>>95
知らなかった。ちょっと楽になる。サンクスですわ
110:デフォルトの名無しさん
07/11/15 06:46:39
zipの圧縮、解凍をサポートするapi関数ってある?
Jpegの伸縮のように、外部ライブラリ入れないとダメかな
111:デフォルトの名無しさん
07/11/15 08:09:45
なんでXPでzipfldr.dllなんてDLLが追加されたか考えれば分かるだろう
112:デフォルトの名無しさん
07/11/15 08:16:37
スレ違いだけど.NETならGZipStreamクラスある
113:デフォルトの名無しさん
07/11/15 08:49:12
zip圧縮解凍ライブラリなんてネット上に腐るほどあるだろ
zipfldrを呼び出す方が遥かに面倒だと思うが
114:デフォルトの名無しさん
07/11/15 10:05:12
COM使ったことあれば、そう面倒でもないと思うが・・・まぁ人それぞれか
115:デフォルトの名無しさん
07/11/15 11:24:13
zipfldr.dllのCOMインターフェイスって公開されてたっけ?
IShellFolder::GetUIObjectOfでIDropTargetを取得してD&Dをエミュレートして・・・とか考えたけど結構面倒な気が
他に方法あったらおせーて
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すれば早く片付くかもね
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4218日前に更新/231 KB
担当:undef