Win32API質問箱 Build59at TECH
Win32API質問箱 Build59 - 暇つぶし2ch1:デフォルトの名無しさん
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すれば早く片付くかもね

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)


325:デフォルトの名無しさん
07/11/22 15:20:45
エクスプローラでマイコンピュータを開くと表示される
「ローカル ディスク」や「CD ドライブ」といった文字列を取得するには
どうすればいいのでしょうか?
30分以内に小倉優子ばりのおっとりキャラで答えてください

326:デフォルトの名無しさん
07/11/22 15:23:32
shell32.dllからGetResource

327:デフォルトの名無しさん
07/11/22 15:36:31
SHGetFileInfoで取れぬのか?

328:デフォルトの名無しさん
07/11/22 15:41:26
>>327
おおいけそうな予感
ありがとー☆ミ

329:デフォルトの名無しさん
07/11/22 17:28:11
memo

URLリンク(www.microsoft.com)


330:デフォルトの名無しさん
07/11/22 17:37:49
割り込んで申し訳ないのですが、教えてください。
DirectX全画面のゲームの上から、文字や画像を表示する方法はないでしょうか?
(レイヤードウィンドウとかはダメでした。。。)

331:デフォルトの名無しさん
07/11/22 18:36:06
グラフィックカードに直接アクセスして
描画領域くりぬいてるから駄目なんじゃない?


332:デフォルトの名無しさん
07/11/22 18:42:35
よくチートツール類がやってる方法:

プロセスに潜り込んでIDrectDraw***を乗っ取り、そのBlt()あるいはBltFast()に割り込んで自分で書く。

333:デフォルトの名無しさん
07/11/22 19:19:22
>>330
俺は普通に枠なしウィンドウで文字表示したことあるけど
べつにその画面内に描画したいわけじゃないんだろ

334:デフォルトの名無しさん
07/11/22 19:37:41
330です。
説明不足ですんません&ありがとうございます。

よくMODツールなんかで見かけるやつです。
(レースゲームなんかでスピードメータを追加する改造など)

でもどうやったら、DirectDraw***のオブジェクトを乗っ取れるか?
それができたらやりたい放題ですね。
そこをぜひぜひお願い申し上げます。

(僕のプログラミングレベルでは・・
デバイスコンテキスト取ってDrawText、BitBltぐらいしかできないっす。)

335:デフォルトの名無しさん
07/11/22 19:47:33
そのレベルじゃ厳しすぎるだろ・・・

336:デフォルトの名無しさん
07/11/22 20:06:50
>>334
(1) APIフックで CreateDirectDrawの類をフックして順次wrapperオブジェクトを返す
(2) 途中まで同じで、wrapperは使わず IDirectDraw9Device 等の vtbl を書き換える
のどっちかかな。

APIフックの仕方やvtblの書き替え方を自分で見つけられる程度の実力があれば、
地味にやってけばできるでそ。

337:デフォルトの名無しさん
07/11/22 20:41:49
334です。
>>335 やっぱり?
>>336 ありがとうございやーす。

とりあえず正しい方向へ行けるのでホッとしました。
あとは学習あるのみ・・・

338:デフォルトの名無しさん
07/11/22 21:05:42
>>337
dxwndのソースが参考になるかもな。ならんかも知れんが。

339:デフォルトの名無しさん
07/11/22 21:28:37
DirectDrawって・・・
もう今じゃほとんど使われていないぞ

340:デフォルトの名無しさん
07/11/22 21:29:20
DWMをXPでいぢりたひ

341:デフォルトの名無しさん
07/11/22 21:30:23
>>338
中に「int HookDirectX(TARGETMAP *target)」こんな関数あったよ。
モロです。
地道にやってたら2週間かかってたかも
嬉しいんだけど、ちょっとはずかしい。

342:デフォルトの名無しさん
07/11/22 23:54:47
>>337
ぶっちゃけTaksiが全てのソースを公開してるんだがな

343:デフォルトの名無しさん
07/11/23 00:18:16
CはJavaとかとちがってガベコレがないから
プログラマがすべてリソースの開放をしなければならないと聞いたのですが
どの入門サイトもそれらしいコードがないのですがなぜでしょうか?
最初にメッセージボックスを表示するサンプルが多いようですが
メッセージボックスを開放する処理はどうすればいいのでしょうか?
また、ウインドウを作成したときもPostQuitMessageを送るだけで
その後ウインドウを開放するようなコードがないHPばかりなのですが


344:デフォルトの名無しさん
07/11/23 00:19:51
>>343
ネタだよな?そうだよな?

345:デフォルトの名無しさん
07/11/23 00:44:16
>>343
リソースの解放なんて必要ないよ。
一部の特殊なリソースを除けば、プロセス終了で、OSが全て片づけてくれる。

346:デフォルトの名無しさん
07/11/23 00:45:20
>>343
malloc/freeやnew/deleteというのがあるじゃないか。
GetBufferしたらReleaseBufferしなきゃならないとかもそう。
ファイルは開いたら閉じるのだってリソースの解放だ。

メッセージボックスの件はネタだと信じたい。

347:デフォルトの名無しさん
07/11/23 00:58:25
>どの入門サイトもそれらしいコードがない
>その後ウインドウを開放するようなコードがないHPばかりなのですが
文面から察するに経験豊富というわけではないだろうから、
「それらしい」や「するような」という判断自体が怪しいが
このレスからじゃあどのページをもってそう判断しているのかわからない

>Cは……プログラマがすべてリソースの開放をしなければならない
というのはC言語としての話であってWin32APIの話ではない。たとえば
>その後ウインドウを開放するようなコードがないHPばかりなのですが
の場合、「ウインドウを開放する」というコーディングはWinAPIとして要求してないと思われる。
(これもどのコードについて言っているのか解らないので推測だが)

まともなページであれば、APIとして開放しなければならないリソースはAPIの作法で開放されている。
ただその作法を知らないのであれば開放のコードは見つけられないかもしれない。
( HANDLE hFile = malloc(...) / free(hFile) なんてしないので)

なので勉強しろ。そして調べろ。

348:デフォルトの名無しさん
07/11/23 01:01:17
論文がはかどらなくてムシャクシャして書いた。
開放がすべて誤字であることに気づいたが反省はしていない。あすも平日だがまだがんばる。

349:デフォルトの名無しさん
07/11/23 01:01:27
メインスレッド内でCreateThreadで作成した複数の副スレッドのうちの特定の一つのスレッドを、
メインスレッドから停止(停止っていってもいい?スレッドを消したい)させるにはどうしたらいい?
ExitThreadでは特定スレッドを別スレッドから狙い打ちにできないような???
ねぇどうすればいい??

350:デフォルトの名無しさん
07/11/23 01:12:58
>>348
明日は休日ですよ……

351:デフォルトの名無しさん
07/11/23 01:29:16
hoge.exe: user error (GetClientRect: ヲ」ヲ マ・!ケgY
(error code: 578))
ってどういう意味のエラーなのでしょうか?
一部の文字化けは元からです。
コンパイル環境:mingwで g++ hoge.c -mwindow

352:デフォルトの名無しさん
07/11/23 01:34:04
>>349
ExitThreadは呼び出し元のスレッドを終了させる奴だ
別スレッドを終了させるならTerminateThread

ただ別スレッドで作成したリソースが残る可能性があるから
続行判断用のフラグをCreateThread時に渡しておく方がベターだと思う

その場合はフラグの領域が先に開放されないように注意が要るけど

353:デフォルトの名無しさん
07/11/23 01:36:26
>>351
デバッグしなさいw

354:デフォルトの名無しさん
07/11/23 01:44:19
>>352
TerminateThread、そういう関数がありましたか。。
ExitThreadはc標準の_exitthreadみたいなもんなんですね。

>>352さん指摘どおり、たしかに
「TerminateThread is a dangerous function that should only be used in the most extreme cases.」
ってありますね。

やっぱりパラメーターで渡しておくほうがよさげですね。
でもこのやり方嫌いなんだよなぁw なんか副スレッドがいつ本スレッド内のパラメーターの変更をチェックしてるんだよ、と
渡来してみます。ありがとうございました。

355:351
07/11/23 01:52:37
どういう理由かわからないのですが、
実行ファイルを削除してから再コンパイルすると正常に(?)動作しました。

356:デフォルトの名無しさん
07/11/23 05:14:13
_で始まる関数は標準じゃないぜ
これ知らないと俺みたいな一言居士がうるせーから要注意な

357:デフォルトの名無しさん
07/11/23 07:37:18
>>354
排他制御
アトミックオペレーション

358:デフォルトの名無しさん
07/11/23 09:44:32
読み取りだけなら領域が無効になってなきゃ別にいつだって良いだろ
書き込みなら排他制御すべきだが

359:デフォルトの名無しさん
07/11/23 09:55:36
             ____
          /__.))ノヽ
          .|ミ.l _  ._ i.) 
         (^'ミ/.´・ .〈・ リ  
         .しi   r、_) |     チャリーン
           |  `ニニ' /    __ lヽ,,lヽ
          ノ `ー―i´    | |Θ|(    )
        | ̄ ̄ ̄| ̄ ̄|_ |_|_|と   i
        |___|__|_|  |_|  しーJ

            ____
          /__.))ノヽ
          .|ミ.l _  ._ i.) 
         (^'ミ/.´・ .〈・ リ  <ヘンリーはわしが育てた
         .しi   r、_) | 
           |  `ニニ' /    __ lヽ,,lヽ
          ノ `ー―i´    | |Θ|(    )
        | ̄ ̄ ̄| ̄ ̄|_ |_|_|と   i
        |___|__|_|  |_|  しーJ

360:デフォルトの名無しさん
07/11/23 09:58:40
誰だヘンリーってw

361:デフォルトの名無しさん
07/11/23 10:31:49
ビルゲイツ(本名William Henry Gates III)だろ

362:デフォルトの名無しさん
07/11/23 14:32:39
Win32でメニューバーの色を取得したいのですがどうすればいいのでしょうか?

363:デフォルトの名無しさん
07/11/23 14:40:22
getsystemmetrics

364:デフォルトの名無しさん
07/11/23 14:42:00
DWORD menu_color = GetSysColor(COLOR_MENU);


365:362
07/11/23 14:49:42
>>363-364

>>362です。有難うございました。

366:デフォルトの名無しさん
07/11/23 15:31:59
>>365
誰だよwww

>>363-364
ありがとうございます。

367:デフォルトの名無しさん
07/11/23 15:40:52
ツリービューをダブルクリックでは開閉させたくないんですが、
どういう方法をとればいいんでしょうか。

368:デフォルトの名無しさん
07/11/23 17:13:30
サブクラス化してダブルクリックのメッセージを捕まえてreturn 0;をすればおk

369:デフォルトの名無しさん
07/11/23 19:46:11
>>368
やってみます。
ありがとうございました。

370:デフォルトの名無しさん
07/11/23 20:20:42
すでに起動してるアプリケーションに文字列をSendMessageするにはどうすればいいのでしょうか?
FindWindowをしてWM_APPのLPARAMに文字列を乗せて送信してみたところ
誤ったポインタが届いてしまいました

371:デフォルトの名無しさん
07/11/23 20:26:21
WM_COPYDATA

372:デフォルトの名無しさん
07/11/23 20:36:44
ポインタを別プロセスに送っても無意味
>>371かファイルマッピングを使う

373:デフォルトの名無しさん
07/11/23 20:51:36
テキストファイルから複数行の文字列を取り出し
リストビューに表示させるにはどうしたらいいですか?

374:デフォルトの名無しさん
07/11/23 20:51:37
アトムくんじゃダメなの?

375:デフォルトの名無しさん
07/11/23 20:51:47
>>371-372
出来ました!
こんな便利なのあったのかー
ありがとうございました

376:デフォルトの名無しさん
07/11/23 20:57:38
>>373
そりゃテキストファイル開いて、読んで、リストビューコントロールにに登録すりゃいいんでない?

377:デフォルトの名無しさん
07/11/23 21:19:04
複数のBMPを結合して4GBytes以上のAVIファイルを作成するには
どうしたらいいですか?
できればVideo compressorも使いたい。

378:デフォルトの名無しさん
07/11/23 21:20:49
どのように登録すればいいんですか?

379:デフォルトの名無しさん
07/11/23 22:17:05
まずパソコンの電源を入れます

380:デフォルトの名無しさん
07/11/23 22:24:19
>>379
次は?


381:デフォルトの名無しさん
07/11/23 22:25:06
入れました。

382:デフォルトの名無しさん
07/11/23 22:29:17
そしてスタートボタンをクリックします

383:デフォルトの名無しさん
07/11/23 22:31:46
>>373
これって、リストビュー1つのアイテムに複数行表示させるってこと?
ならオーナードローかな、LVS_OWNERDRAWFIXEDあたり

384:デフォルトの名無しさん
07/11/23 22:42:45
>>383
いえ、
テキストファイルから一行ずつ項目を追加したいです。

385:デフォルトの名無しさん
07/11/23 22:49:55
うるせーばかどっかいけ

386:デフォルトの名無しさん
07/11/23 22:51:55
リストビュー使うのにリストビューアイテムの追加の仕方なんて
人に聞くことじゃないでしょ。。。
調べろ禿で終わり

387:デフォルトの名無しさん
07/11/23 22:55:05
あなたがここに書いたとおりに実装すればよい
ただし、そのために何のどのような設計が必要かを検討する
さらにそのために何のどのような設計が必要か検討する これを繰り返す。
言語や実装方法依存しない設計であること、この繰り返しで疑問の余地がなくなるまでコーディングを開始しないことが重要

これが完了すればコーディングなんて一瞬で終わるし、再コーディングなんて手戻りはまず発生しない

388:デフォルトの名無しさん
07/11/23 22:58:36
ここでのレスを参考に分割ウィンドウ作っていたんですが
スクロールバーってオーナードローできないんでしょうか?
境界線を自力描画したせいか普通に置くと
境界線がスクロールバーの下をくぐるんです

389:デフォルトの名無しさん
07/11/23 23:00:37
コーディングして実際に確認しないと、言語や実装方法依存しないことが確認できない。
理論だけで集結するなら、実験をする科学者はいない。
太平洋で核実験をする国もない。

390:デフォルトの名無しさん
07/11/23 23:02:34
>>388
クライアントに直接書かずにウインドウを作ればいい。

391:デフォルトの名無しさん
07/11/23 23:03:09
ReadLinesToListviewItems()

392:デフォルトの名無しさん
07/11/23 23:44:38
>>388
MFCかWTLのソースでも見ろよ

393:デフォルトの名無しさん
07/11/24 00:08:57
フックについて詳しく書かれた書籍はありますか?
ネット上の情報ではあまり身につかないと思うので・・

394:デフォルトの名無しさん
07/11/24 03:38:42
すべてを詳しく網羅したものはない

395:デフォルトの名無しさん
07/11/24 04:35:45
Advanced Windows かなあ

396:デフォルトの名無しさん
07/11/24 10:32:43
フックなんて大して覚えることねーだろ

MSDNの説明読めば各フックが呼び出される状況は把握できるし
そしたらあとは自分で応用方法を考えるだけ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch