Win32API 質問箱 Build11

このエントリーをはてなブックマークに追加
1980 ◆oqSJWu4Ch2
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
やさしい お兄ちゃん 達が答えてくれるかも。
でも、質問する前に検索ぐらい汁!!
過去スレ・参考は>>2 ぐらいにあるといいな。
2980 ◆oqSJWu4Ch2 :03/05/11 20:16
乙カレー

  ヽ,,.'"                      ,           ゙、 【お洒落】女の子に大人気の東京急行【お洒落】
:::::::;:::',i゙i、,_   ,.'  ,     ,   .,  ,  .:,.' .:    ',..             、 ゙、 上品・美麗な田園都市生活
. :/::::::}r'、 `゙ ,'  .,'  .: ,' ,,、-/‐,ッ、:::/..:;:  .. l l;:..;.         ',. ',
./:: :::/::. ヽ i  l .::l:,、r'゙ ::,.'i../,'.:::,'i.:::;,'. .:,':''7i'it、l!:. ,       i,. !
'.::::::/:l::::::..  l.   l. ::;r':i l .:::,' l  l:::,' !::,',' .::;': /,'/ !:l'l;::. i  ,' l:.  i  !!,'
::::::/::!:',::::::::::l.   ::',/i l:|. l::;;!、ェ、,,l:i l::,'.!:..::,,'::/ / l:i l:゙:.,' /:. l::  | j.l'
::::,'!::::'::゙、:::::::!   ::::i、l. 'l,,;ン',,、ぃ,゙ヾ l:l l::::/,ソ.r''"ヾl, l:::/ン゙l:::: l::: i /l'
:::j ',:::::::::::::::::!. ! :::::l、゙,,ilr' ,il゙ _,,!i.   'l l::/ '  ,r゙゙'i;.ヾlン''/: l:::: ,'l:: ,'j ./ l
::i. ゙、::::::::r''''!. ! :::::!'''゙li. l;:゙'illlr;::!   ゙    i:!、r:'l. ;シ./::: .!:,r!,':;/,',.'l j
:l   ゙、:::i゙''、゙!. ! ::::|.  ゙. 'r,ン::::ソ       l;: ''゙:;' ' ,':::: .r' /ツ::ジ j j
:|.    ヾ゙、 '、i. ! ::::!   ''‐゙゙'='゙-       . ゞ-'',、 i:::::: j '"!:i::  j .,'
:l     `゙' 、', i :;::l          r‐‐‐-,.  ̄`  .j:::: ,'  l:,i:  ,' /
';!       ',.i. ';:!,_          |   /      , ':::: ,'  ,ソ!: ,'./ おかあさま
,ヽ       ゙、, ';ヘ!ヽ、       ',. ,.'    ,、‐l:l::::: /  /.,' ,'/ ヴァイオリンのお稽古に逝って参ります
:!          ',.',',l,_  ゙'ヽ 、,,_.  ゙'" ,、 ‐'"  ,',i::: /   / ,.シ
':',         '、',゙、゙''ー- 、、、、゙゙i,゙''''"     /'i::/     /,.'
ヾ、     ,,、 - '゙::ヾ,ヽ:...:...:...:...:...:{          ,'/    ,ン゙
   ,、- '"゙~ヽ、:...:...:..::゙、:...:...:...:...:...:.lヽ、 _     /
. 、r''ヽ、     ヽ:...:...:...:...:...:...:...:...:...:...:.゙j ゙''‐ 、 '
6デフォルトの名無しさん:03/05/11 22:34
すみません、質問させてください。
AプロセスとBプロセスで同期を取るために、
AプロセスがBプロセスをwaitさせたいとします。
その場合、Aプロセス内でWin32APIのSuspendThread関数を用いて、
Bプロセスをwaitさせる例が、 
「Advanced Windows(Jeffrey Richter著・MicrosoftPress ASCII」
に記述されていました。
 この例の中ですでに起動されているスレッドのハンドルを取得するため、
OpenThread関数を用いたコーディングを行ってるのですが、
このOpenTread関数はWindows2000からのサポートのため、
WindowsNT4.0には対応していません。
 そこでWindowsNT上で、すでに起動されているプロセスをwaitさせるためには
どのような方法またはAPIが存在するでしょうか。
 ぜひお願いしますm(_ _)m
WaitForSingleObject
その他
>>6
まあ、不注意なんだろうけど...、マルチかよ !!
OpenMutexで名前指定、とか。
プロセスAからプロセスBにメモリーを確保してデータを読み書きするのに
WriteProcessMemory、ReadProcessMemoryを使うのは、うまくいくのですが、
下のプログラムで、確保したpBaseアドレスはプロセスBのリニアアドレスに
なります。
そこで、FS:[EAX]、GS:[EAX]のように、セレクタ修飾でプロセスAからアク
セスできるように、プロセスAのセレクタのアドレスに変換するAPIや、
その方法はあるのでしょうか。

HWND Wnd = FindWindowEx(NULL, 0, NULL, "XXX");
GetWindowThreadProcessId(Wnd, &dwPID);
HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION
| PROCESS_VM_READ
| PROCESS_VM_WRITE,
FALSE, dwPID);
DWORD pBase = (DWORD)VirtualAllocEx(hProcess, NULL, 10240,
MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
11デフォルトの名無しさん:03/05/12 06:49
あるウィンドウの状態(最大化、標準、最小化)を調べるAPIを訓えて( ゚д゚)ホスィ
ウィンドウハンドルは既知です。
GetWindowPlacement
>>6
NtOpenThread
非公開だが今後NT4のサービスパックが新たに出ることは
ないだろうから大丈夫だろう多分
>>10
「プロセスAのセレクタ」なんてものは存在しない
(IA64やAlphaやPPCやMIPSではどうなってると思ってるんだ?)
仮想メモリについてちゃんと勉強しろ
>>12
( ゚д゚)アリガトウ
>>10
メモリの共有が目的なら、
明示的に共有メモリを使ったほうがいいんじゃない?

それともデバッガ作ってるの?
>>15
ReadProcessMemoryとWriteProcessMemory使うのが
マンドクセイから直接アクセスする裏技はないのかという
質問に見えた。
MSDN Onlineって見辛いなー
Microsoft Plans Windows API Cleanup
ttp://www.internetweek.com/breakingNews/showArticle.jhtml?articleID=9400498
>"Win32 has like 76,000 APIs, and they're taking it down to 8,000 with Longhorn technology,"
> said one source familiar with the plans.

あぼーん
19デフォルトの名無しさん:03/05/13 06:06
>>18
乱立関数をあぼーんしたいってのはわかるが
アップグレード品の売れ足くらい考えてやるだろ
>>18
互換性があればどうでもいいわな。
(互換性なきゃLonghorn死滅だが。)
互換性なくすんだったらWindowsの名前捨てろよな
Win3.1との互換性について問い詰めたい。小一時間問い詰めたい。・・・・・・・・21を。
23デフォルトの名無しさん:03/05/13 12:38
マウスフックしてる間はマウスカーソルを独自のものに変更したいのですが、
どうすれば良いのでしょうか?
>>22
一応3.1アプリは動くのでは?
25デフォルトの名無しさん:03/05/13 18:06
質問です….
配列で持っているYUV形式のカラー画像データをビットマップにしてウインドウに
表示するには,どうすればいいんでしょうか?
とりあえずRGBに変換して(これはOKです),その後なんですが.
(YUVのまま使えればその方がいいですけど)

検索してみても,ビットマップファイルをウインドウに表示するは見つかった
のですが,メモリ上のRGBデータを表示するのは見つけられませんですた・・・.
SetPixel
DIBを作って自分で変換するか、SetPixelで1ピクセルずつ描画だな。
前者が普通だろな
3.1のも一応動くことになってるぞ。
やったことないので分からんが。
lstrcpy と StrCpy を一本化するとか、〜Ex系に統一するとか、そういうことでないの?
複数のスレッドから、同じEnumWindowsを呼び出すとやばいですか?
ぜんぜん
MSには、2005年といわず、とっととロングホーン出してもらいたい。
で、瞬くうちに普及して欲しい。
そうなれば、WM_PAINT や Invalidate* + UpdateWindow のない
健全な世界になることだろう。


>>33
どういうのが健全なの?
よくわからん。
>>34
再描画が楽になったらいいなと思ってるんじゃないか?

ロングホーンがそうなるなんて聞いたことないが
DirectX9使うことを勘違いしてるのか
>>35
要は1枚1枚単独のWindowを別のメモリ空間上に描画して行って
重ね合わせ等々はOSがやるってことでしょ?

互換性上、WM_PAINT(GDI)がなくなるとは思えないが
Windowの影になったりして再描画が必要になることは
実質なくなるんじゃない?
どっちにしろ、WM_SIZEで再描画しないと、いけない訳だが…
ものすごい勢いで再描画されるのかな。
「俺のマシンは デスクトップに電卓ソフトを1つ開いた状態で xxfpsでるよ!」
とか、そういう会話が世間で繰り広げられる・・・。
Mac OS Xみたいになるのカー
>>30
どのみち動かなくなるアプリ多発
互換モードまで付けてるメーカーの所業とも思えん
8年前のバイナリがそのままが動いてるのって、Windowsぐらいじゃないか?
68kのコードって動かないのん? @MacOSX
コマンドライン引数を分割する関数って公開されていませんか?
void cmdlinesprit(LPSTR CmdLin){
  int i=0, p=0, inflag=0;
#ifdef WIN32
  argc=0;
#else
  argc=1;
#endif
  for(;;){
    if (CmdLin[i]=='\0'){
      argv[argc]=(char*)malloc(i-p+1);
      if (argv[argc]==NULL) break;
      qu_strncpy(argv[argc],&CmdLin[p],i-p);
      break;
    }
    if (CmdLin[i]=='"' && (i==0 ||
      (CmdLin[i-1]!='\\' || _fnthctype(CmdLin, i-1)==CT_KJ2))) inflag=!inflag;
    if (inflag==0 && (CmdLin[i]=='/' || (CmdLin[i]==' ' && (argc==0 || CmdLin[p]=='/')))){
      argv[argc]=(char*)malloc(i-p+1);
      if (argv[argc]==NULL) break;
      qu_strncpy(argv[argc],&CmdLin[p],i-p);
      argc++;if (argc>=ARGCMAX-1) break;
      do{
        p=i;i++;
      }while (CmdLin[p]==' ');
    }else i++;
  }
  argc++;
}
>>44
なんじゃこりゃ
http://pc.watch.impress.co.jp/docs/2003/0514/mobile201.htm

>もちろんLonghornでも、レガシーのWin32 APIを用いたアプリケーションを動かす
>必要があるが、古いAPIで描画するアプリケーションは内部的に96dpiで処理。それ
>を任意のサイズに3Dグラフィックチップで拡大表示することにより対応する

(´_ゝ`) ふ〜ん
47デフォルトの名無しさん:03/05/14 15:45
HFONT hFont, hFontOld;
//...
hFontOld = SelectObject(hdc, hFont);
とやると型変換ができませんみたいなエラーになってしまいます。
もし解決法がわかる方がいらっしゃいましたらアドバイスお願いします。
(HFONT)SelectObject(hdc, hFont);
49デフォルトの名無しさん:03/05/14 16:26
くだすれDelphi(超初心者向け)
http://pc2.2ch.net/test/read.cgi/tech/1051882835/
で質問したところ、

このスレで質問してみるといいということなので質問します。
http://pc2.2ch.net/test/read.cgi/tech/1051882835/484
>484 名前:デフォルトの名無しさん [] 投稿日:03/05/14 14:42
>他のアプリを操作するツールバーみたいなソフト作りたいんですが、
>直前にアクティブだったウィンドウを取得する方法教えてください。
>>48
ありがとうございました。
SelectObject(hdc, (HFONT)hFont)とやっていた俺はオオヴァカなわけで…
色々調べていたところ、HFONT変数はひとつで
SelectObject(hdc, GetStockObject(SYS_FONT))ってのがあったのですが、
上記のhFont, hFontOldを使う方とどっちがいいのでしょうか?
>>50
どっちがいいっちゅーか、hFontOld が何のためにあるかを理解したほうがよいと思われ。
HFontOldは最後にデフォルトに戻すため とは違うのですか?
GetStockObjectでもデフォルトに戻せるのかと思ってたのですが…
>>44
まだまだ修行が足りんぞ

↓こんなのでも見て勉強しる
ttp://www.ioccc.org/
>>52
SelectObject(hdc, hFont);
//描画...
SelectObject(hdc, GetStockObject(SYS_FONT));
DeleteObject(hFont);

こういうことか。どっちの方がいいんだろうね(w
HFONT hFont, hFontOld;

// -- hFont取得 --

hFontOld = (HFONT )SelectObject(hdc, (HGDIOBJ)hFont);

// -- 描画処理 --

SelectObject(hdc, (HGDIOBJ)hFontOld);

hdcが必ず以前にGetStockObject(SYS_FONT)を持っていたとも
限らない。ついでに言うと、漏れの環境ではキャストしなくても
エラーでないよ?エラーレベルが高いんでないかい?
エラーレベルじゃなくて、STRICTでしょ。
っていうか、STRICTを指定しても(HGDIOBJ)はいらんでしょ。
57デフォルトの名無しさん:03/05/15 12:36
猫プロHP27章でCreateFont関数を簡単にするためSetMyFont関数を作成してますが、
その引数にHDCを含めているのはなぜでしょうか?
HDCなしでも一応エラーがでませんでしたが、何かあるのかと思い質問させてもらいました。
58デフォルトの名無しさん:03/05/15 12:38
             ∩
        ∧_∧   | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (  ´Д`)//  < 先生! 今年は犯珍優勝できそうでつか?
      /       /    |
     / /|    /      \  去年の今頃も調子良かったのですが。 ( ´,_ゝ`)プッ
  __| | .|    |         \
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\     \_____________
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
59(;´Д`):03/05/15 12:42
>>58
満身創痍の虚塵ファン、ミジメダネ
逆から読んだらジンキョ(腎虚)ファンだしね
もうグダグダ
>>57
なんだろう?
次章ではさらに引数減ってるね。
>>57
>>61
漏れが推測するに、最初は
void DrawMyText(HDC hdc, int x, int y, LPSTR str, LPCTSTR face)
こんな感じだったのでは無いだろうか?
それを途中で、テキストの大きさも…角度も…色も…とか考えて
フォント作成用のSetMyFontに変えた。しかし、HDCを消し忘れた。

まぁ、単なる揚げ足取りだね。無くても何も問題無いよ。
63名無し@沢村:03/05/15 16:56
>>57
ヌヒよ、フォントのポイント数をフォントの高さに変換するために用意していたと見た。

HFONT CreateMyFont(HDC hDC, int nPoint, LPCTSTR lpszFace);
ウインドウをEnumWindowsで列挙して、ボタンをGetDlgItemで取得して
SendMessageでBM_CLICKを送ってボタンを押しているんだけど
時々アクセスバイオレーションになったり、何も言わず落ちたりする。
なにか原因考えられますか?
>64
まずは IsWindow() かな?
66デフォルトの名無しさん:03/05/15 20:22
Win32APIの文字列を渡す関数でよく、文字列といっしょに
文字数を渡しますがこれって何の意味があるのでしょうか?
バッファオーバーフロー対策


と思ってみるテスト
6866:03/05/15 20:43
>>67
ありがとうございます。
os側はszで待つのでただのロスだとおもうのですが...
部分文字列を指定し易いとか
void hoge(char* szText)
{
  lstrcpy(szText, "1234567890");
}
:
:
char a[5];
hoge(a);

こんなふうだと困るから。
Win32 APIが本当の文字列を使うようにすればよかったのにね。
おかげでバグてんこもり。
>>66
少なく指定すれば任意に削ることが出来る
その程度のことすら思いつかないほど思考が堅いのなら
プログラムを作るのは諦めた方がいい
TextOut みたいのじゃなくて LoadString みたいなののことを言ってるのかな。
7466:03/05/15 21:02
>>73
いやまさにTextOut、DrawTextとかそんなのです。。。
>>72
あんた。馬鹿。
>>74
だから>>70が答え。
>>76も馬鹿だな。
>>77
なんでやねん。hoge関数がWin32APIだと思って。
TextOut って文字列を他のバッファにコピーしてるの?
8066:03/05/15 21:11
>>74
いや、であれば70さんの例は答えではないと思います。
73さんのLoadStringと同様にバッファのポインタを渡してそこに値を
もらう(itoaとかも)のであれば理解できます。
が、TextOutとかはWin32の規約でszで渡すと決まっている以上
文字数を指定するのは意味がないと思います。(むしろ72さんの指摘
が正しいかと...)
8166:03/05/15 21:11

>>76ですた
要するに文字列の中から先頭の一文字だけ
表示したい場合などに利用できるということ
TextOutはszと決まっていない。馬鹿ばかりだな(藁
>>80
TextOutに渡す文字列の終端は\0ある必要はないんだよ?
文字数渡さなかったらOSがどこまで表示していいかわからないじゃん?
8566:03/05/15 21:16
8666:03/05/15 21:17
>>83-84
MSDNにはLPCSTRとなってますが...
すまん。>>84の訂正
×\0ある必要はない
○\0である必要はない
>>86
MSDNに
>この文字列はゼロ文字 ('\0') で終わっている必要はありません。
となってますが...
>>86
違う
WindowsのAPIの文字列系は基本的にLPCTSTRで
9066:03/05/15 21:20
>>88
Pointer to a constant null-terminated string
of 8-bit Windows (ANSI) characters.
となってますが...
91_:03/05/15 21:21
Tって何か知ってるのかな?
>>86
MSDNのはLPCTSTR。よく見てみ。
9466:03/05/15 21:25
>>92
ワイド文字ですか?
szであることにはかわりないと思うのですが
>>90
英語ヘルプにも
The string does not need to be zero-terminated,
と書いてある
\0を終端と見なさないため、文字列途中にわざと\0を入れて
それ以降も表示されるように文字数を設定すれば
\0より後ろの文字も描画される
>>94
途中にも\0がでてくるから(略
>>94
>ワイド文字ですか?
違う
こんなことを書いている時点でAPIの仕様どころか型の意味も分かっていない
まぁまぁ。完全に何もわかってないから質問したんだろうし。
なんの話しているのか知らないけど、strcpyとmemcpyの違いみたいなものでしょ?
\0を末尾として見れば便利だけど、文字列しか扱えなくなってしまう。
10066:03/05/15 21:32
>>96
それは分かるのですが、それはTextOutA、TextOutWを使い分けで
対応できますよね。

>>97
教えてください。お願いします。
まぁとりあえずMSDNでTextOutの解説読めってこった。
10299:03/05/15 21:34
見当違いだったみたい(鬱)
>>100
設定によって可変
型のヘルプくらい目を通せよ
>この文字列はゼロ文字 ('\0') で終わっている必要はありません。

これ読んだのかな?
>>103
それは解ってるんでないかい?それより TextOut がどうして
そんな仕様になってるかなんだが、俺は>>99で納得してしまった。
がしかし>>102でまた分からなくなった。
10666:03/05/15 21:37
>>95
MSDNの英文のTextOutの解説を読むと確かにそうなっていました。
(MSDNが少し古いからでしょうか)
僕が完全に誤っていました。
レスをくださったみなさんお騒がせしました。m(__)m
世の中には文字列が\0で終わらない言語があるからでないかい
AdaとかDとかそのへん。
そういう言語のことも考えるなら、本来全てのAPIで長さを渡すべきなんだろうけど、
やはりC優先で文字列そのものが重要なAPI以外は\0終端にしてると思ってた。
(VB、Delphiは言語がサービスで\0入れてくれるけど)
Delphiは知らんが、VBの文字列は最後は\0が二つ連続すると決まっている。
>>108
VBはBSTRなので\0終端ではないのでは?
>>109
他の環境と連携させるときに>>66みたいな勘違いがバグを出すので
ウザイからわざわざ付けているだけ
11166:03/05/15 22:08
↑すんませんね。

またのこのこ来ますた。
MSDNの2001年10月リリースを入れたのですが、日本語の解説も
「\0で終端する必要はない」となっていますた。
すみませんでした。。。

112デフォルトの名無しさん:03/05/15 22:19
矩形を描画したいのですが、Rectangleだと内部を塗られてしまいます。
ただの四角形を書きたいのですが、クリッピングとかするしか方法は
ないのでしょうか?
>>112
ラインを4回引けばすむのにそうしない理由は何故ですか?
何か深い理由があるんですか?
是非教えてください
NULL_BRUSH
115デフォルトの名無しさん:03/05/15 22:24
>>113
遅いかなと思いまして
>>113
ラインを複数引けば必要ないRectangleがある理由を考えてみなさい。
>>113
こういう、何も考えないでレスする馬鹿、どこにでもいるな。
118名無し@沢村:03/05/15 22:35
ボタンを押したとき値を変数に代入して、ボタンを離したときそれを配列に書き込んで配列のインデックスをインクリメントしたいのです。
この処理はボタンを押したときか離したときどちらかにまとめてはされず、押したときと、離したときに別別にしなければ、どうしてもいけないのです。
でもそうすると、ボタンを早く押しすぎたり、離したときにマウスがボタンからずれてしまうと、配列の値がおかしくなってしまうのです…。
離したときにマウスがボタンがずれてしまうほうの問題は何とか解決したのですが、ボタンを早く押しすぎるときの解決法がどうしてもわからないのです。
ボタンを早く押しすぎても上手く値が配列に書き込めるようにするには、どうしたらいいのですか?
>>118
ボタンコントロールをサブクラス化して
マウスのアップダウンメッセージを取得すればすむ
120112:03/05/15 22:58
>>114
ヌルブラシっていうのがあるんですね。
グリッドを書いているのですが、セルごとにクリッピングをかけるのは
イヤだなと思っていたのでとても助かりました。
ありがとうございました。m(__)m
121デフォルトの名無しさん:03/05/15 23:10
win32apiを使わずにウインドーを出したり文字を出したりしたいのですが
どうやってやりますか?
マイクロソフトのAPIは使いたく無いので自分で考えたウインドーを出したいのです

122デフォルトの名無しさん:03/05/15 23:11
サグクラス化について質問があります。
wavが鳴らされたときにキャッチできるメッセージってあるのでしょうか?
よろしくお願いします。
>>121
DOS で、自分で VRAM に直書きするか。
自分で OS + Window System 作れ。
124デフォルトの名無しさん:03/05/15 23:22
>>123
DOSで自分でVRAMに書くってどうやってかくんですか?
windowsで出来るんですか?
windows上でウインドウを作りたかったらM$のAPI使え
>>124
VRAMのアドレスは絶対値なので、場所さえわかれば簡単です
127デフォルトの名無しさん:03/05/15 23:30
winapiって本当に使いずらいですね
ユーザーインターフェースが少なすぎて
使い物になりませんよ
せめてユーザーにもウインドーが作れるようにして欲しいです
だからMSはアホなんですよ
そうですね。
>>127
結局、なにがやりたいんだ。
四角形でないウィンドウを作りたいんだったら
「リージョン ウィンドウ」でもキーにして検索しろ。
130デフォルトの名無しさん:03/05/15 23:54
リージョン ウィンドーってMSのウインドーじゃありませんか
見た目が変わってもウィンドーの中でやってることは同じだから意味が無いです
そうですね。
132デフォルトの名無しさん:03/05/15 23:59
つーか、MSのウインドーは出すのがめんどくさすぎる
自分で作ったほうがまだまし
はいはい。
134デフォルトの名無しさん:03/05/16 00:06
頼んでも無いのにウインドーにタイトルバーとか×とか_とか口つけるのマジ
勘弁してもらいたいもんです
何もしなければは真っ白な箱が出来るもんなのに、
一体どういう考えで作ってるのか不明すぎます
金儲けの事しか考えて無いからアホなんですよ
つまんねぇよsageろ
お前がつけろと言わん限り、タイトルバーも_□×もつけないが?
137名無し~3.EXE:03/05/16 00:11
ウインドウスタイルで思いっきり頼んでるはずなんだけど
138デフォルトの名無しさん:03/05/16 00:13
ウインドースタイルを使わなければ真っ白になりますか?
私が言ってるのはこの事を言ってるんですよ
>>138
オイオイ
そもそもAPI使いたくないのになんでこのスレで質問してんだろう
釣り師警報発令中
アナルを使わなければ気持ちよくSEX出来ますか?
私が言ってるのはこの事を言ってるんですよ
足なんてただの飾りです。
偉い人たちにはそれがわからんのです。
なんのために非クライアント領域がWindowsによって提供されてるのかわかってんのか
GUIなんてただのおもちゃです。
消費者にはそれがわからんのです。
人生なんて玩具です。
人間にはそれがわからんのです。
147デフォルトの名無しさん:03/05/16 10:20
遅レスだが。
>>100
LPC"T"STR の "T" は "Translate" ってことだよ。
UNICODE が #define されていれば LPCWSTR, そうでなければ LPCSTR に
VC++ が読み替えてくれる。
148147:03/05/16 10:45
印刷に関して質問させて下さい。

EXCELファイルを右クリックして、自動印刷実行をしますと、
EXCELファイルを開いた際に設定した印刷設定、例えばトレイ・用紙サイズ
が反映されます。この手法は、SetPrinterでデフォルトのプリンターの設定
を変更することなく、各ファイル毎の印刷設定で印刷がなされています。

ではこの手法を実現するためにどのようなAPIとレジストリを用いているの
でしょうか?

EXECELと同じように新規アプリケーションでファイル毎にトレイ選択・用紙選択
などを行い、デフォルトのプリンタ設定を変えることなく済ませたい考えです。

(プリンターのデフォルトの設定を変更するやり方は各ドライバーごとの
DEVMODE構造体を扱う方法と認識しています。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers
直下のドライバー毎の設定が保存されています。)

>>148
なんでおまいが147を騙ってるんだよ。
150148:03/05/16 10:51
>>148
投稿する段階では、147のつもりでしたが投稿したら148に
なってました。済みませんです。
151148:03/05/16 10:52
>>150

>>149
の間違えですすみません。視力が悪くて、、
>>150-151
最初に書くときは名無しでいいと思うが・・・
153148 ◆Kg.N7J02zE :03/05/16 11:02
>>152
これからは気を付けます。
>>148
OpenPrinter(), SetPrinter()でいけそうだが。
155148 ◆Kg.N7J02zE :03/05/16 11:05
>>154
SetPrinterはドライバーのデフォルトの設定を直接変更してしまう
ので、148の手法には使えないと認識しています。
>>155
いや、印刷後もとの設定に戻せばいいだけでは?
157148 ◆Kg.N7J02zE :03/05/16 11:09
>>154
補足しますと、EXECELの場合ファイルを開いてプリンタのトレイを変更し、
用紙サイズを変更しても、プリンターのドライバーのデフォルトの設定は変わ
りません。・・・(1)
プリンターフォルダで設定できるのがドライバーのデフォルトの設
定です。(2)
SetPrinterは(2)の設定は変更しますが、(1)のような変更がきかないのです。
158148 ◆Kg.N7J02zE :03/05/16 11:11
>>156
同一プリンタドライバでの印刷を、同時に複数のユーザが
行った場合、ドライバのデフォルトの設定が変わってしまうと、
ユーザの思ったような印刷ができません。
>>157
(1) OpenPrinter():ハンドル取得
(2) Getprinter():現在の設定を取得
(3) SetPriner():印刷設定
(4) 印刷実行
(5) SetPriner():(2)で取得した設定に戻す
(6) ClosePrinter():終わり
でダメなの?
160148 ◆Kg.N7J02zE :03/05/16 11:30
>>159
レスありがとうございます
(4)印刷実行の間に,他ユーザから Getprinterされてしまうと,
もとの設定には戻らないと思います.
>(4)印刷実行の間に,他ユーザから Getprinterされてしまうと
他のユーザーが戻してくれるのを期待汁!てか、Open 〜 Close の間に
割り込むことはできるんか?ちょっと調べてくれや>148
162デフォルトの名無しさん:03/05/16 11:53
TextOut関数を使うよりDrawText,DrawTextExを使った方がいいのでしょうか?
TextOut関数について調べていたらDrawTextなるものを見つけて迷っています
163148 ◆Kg.N7J02zE :03/05/16 11:54
>>161
調べてみます.実は印刷用アプリが別で以下のような構成です.
ご指摘で問題点が見えて来ました.これが原因かもです.

(1) OpenPrinter():ハンドル取得
(2) Getprinter():現在の設定を取得
(3) SetPriner():印刷設定
(4) ClosePrinter():終わり

(5) 印刷用アプリで印刷実行

(6) OpenPrinter():ハンドル取得
(7) Getprinter():現在の設定を取得
(8) SetPriner():(2)で取得した設定に戻す
(8) ClosePrinter():終わり
>>49
遅レス申し訳ないけど、GetNextWindowを使うとwindowのz-orderが取得できます。
最前面の一つ下のwindowが *概ね* 直前にアクティブです。。
最小化などでフォーカスを失った場合は直前のwindowが次のz-orderを持つとは
限りませんが、解法は私には分からないです。エロイ方はもっといい方法をお願いします。
>>162 ExtTextOutというのもあるよ(と更に困惑させてみる)
APIがイッパイあるってし・あ・わ・せ(はぁと





なわけねーだろゴルァ!
167デフォルトの名無しさん:03/05/16 13:30
WM_PAINT時にCreateWindowでWS_VISIBLE指定したり、
ShowWindowで表示させようとしたりしてるのですが、表示ができません。
無理なんでしょうか?
168_:03/05/16 13:37
>>167
子ウィンドウをクリップしたいのなら親に WS_CLIPCHILDREN
スタイルを追加すればいいのだが、そういうことやりたいのとは
違うんかな
17066:03/05/16 20:13
>>147
ありがとうございます。昨晩の66です。
LPCTSTRはUnicodeマクロが定義されているかどうかで
VCがASCII変数、Unicode変数に読み替えてくれるというこですよね。
それと同じ意味でTextOutもUnicodeのときはTextOutW、でないときは
TextOutAに読み替えられるから、いづれにせよOSは文字数を受け取ら
なくてもszを検知できるはずということを書いたのですが、
昨日はうやむやになってしまいました。間違っているのでしょうか?
>>170
最後は0じゃなくていいってはじめからいってんだろ!
win16apiのライブラリーとかヘルプのダウンロード出来るところ教えてください
>>170
\0を終端とみなさないから文字数を入れてやらないと
どこまで表示していいか判断できなくなる
昨日から言われているのに未だに分かってないのか
久々に本当の馬鹿を見た
>>167
問題点をはぐらかすような質問は止めれ。
どうせ WM_PAINT じゃなくても表示できんのだろ?
GetThreadSelectorEntry ってどう使うんだ。(具体的に)
あまり情報がないんだが
386のセグメントが分かってればすぐに使えると思うけど。
>147
さらに遅レス。LPCTSTRって
Long Pointer Const To STRing
だと思ってた。
TはTinyのT
TはTinkoのT
Q. What's the meaning of `T'?
A `T' means `Tamachan'.(He is the most popular animal in Japan.)
Reference:
ANSI Sec. 123.4; ISO Sec. 5.67
>>174
は?意味がわからんのですが…
WM_CREATEではできたけど、WM_PAINT時に表示できなかったから聞いてるのですが?
日本語読めますよね?

ちなみにShowWindowでは表示できました。
CreateWindowでWS_VISIBLEをしても表示できない理由はまだわかってませんが。
>>181
WM_PAINT のたびに CreateWindow() してるの?
どういう仕様なのか分からんけど EndPaint() の後に書いても駄目だろうか。
>>182
あ…そうなっちゃいますね…まずいヨカン

ではCreateWindow時に今後表示させる場所にWindowを全部非表示で作成しておいて
SW_SHOW, SW_HIDEで表示、非表示を切り替えるのがいいのでしょうか?
○WM_CREATE
×CreateWindow

でした
少なくとも WM_PAINT でウィンドウを作るなんてのはナンセンス。
サイズ変更枠をドラッグさせるだけでウィンドウが作られるなんて
考えるだけで。。
>>186
ありがとうございました!
今後気をつけます。
WM_PAINT時にウィンドウのリージョンを更新するような処理は禁止
WM_PAINT時にウィンドウのリージョンを更新するような処理は禁止
WM_PAINT時にウィンドウのリージョンを更新するような処理は禁止
EndPaintじゃねーよなw
SetWindowRgnのことか?
BeginPaintだろアフォ
191デフォルトの名無しさん:03/05/17 21:31
ところでHDCの取得には
BeginPaint()とGetDC()があるの?
使い分けってしてますか?
用途分かれてる気がするケド
>>191
BeginPaint()はWM_PAINTハンドラ内専用。
WM_PAINT内でGetDC()を使うと無効領域がクリアされないから
永遠にWM_PAINTを受け取ることになる。
wm_paint内ではbeginpaint それ以外はgetdc
195デフォルトの名無しさん:03/05/17 22:30
TはTakeshiのT
Typename
197名無し@沢村:03/05/18 08:56
おまいらよwin32APIでプログラムをつくるのはいいが、レジスタやメモリには予約ビットというのがあるのを知っているか?
おまいらよ、予約ビットというのはプログラマが勝手に使ってはいけない領域だ。
おまいらよ、この予約ビットの存在を知らずにプログラミングすると、プログラムが暴走したりシステムがハングアップしたりして、大変危険だよ。
例えばmallocで1000バイトばかりメモリを確保した場合、その中に予約ビットが含まれていると、プログラムはどこもおかしくないのに、突然フリーズしてしまったという不思議な現象が起るのよ。
不正なメモリアクセスというやつだな。
この予約ビットというのはメモリのそこかしこに散りばまられているから、正常にメモリを確保するのは至難の技だぞ!!
プログラミングって大変だぞ、おまいらよ!!
沢村よ、最初の頃の元気がないな。

> 例えばmallocで1000バイトばかりメモリを確保した場合、その中に予約ビットが含まれていると

確保したのに、
予約されてて使えないビットがあるというのはいかがなものか。
WinSock2 使ってちょっとしたサーバプログラムを作ってる。

socket() → bind() → listen() の後に...
WSAAsyncSelect(Socket, Window, Accepted, FD_ACCEPT) ってやって、外部から接続に行くとちゃんと WindowProc() が呼ばれる。
で WindowProc() の中で accept() するんだけど、accept() が失敗したら MessageBox() でメッセージを出すようにしてた。
で、最初動かした時に accept() の引数が間違っててメッセージが出るのはいいんだけど、1つだけじゃなくいっぱいでて異常終了する。
デバッガで追っかけると、MessageBox() 呼んだ時に、WindowProc() が呼び出されて、もう一回 MessageBox() が呼ばれて...
で、最終的にスタックオーバーしている。

これって仕様なの ?
スタックオーバーフローを防ぐのはプログラマの責任です
201デフォルトの名無しさん:03/05/18 10:27
>>199
WINAPIでの話しだけど、
WM_PAINTでMessageBox()を書くと、無限ループになる。
  (最終的には止まるが)
よく、winsockについては知らんが
MessageBoxが怪しいと感じる。
MessageBoxがでたら次はWM_PAINTでWindowProcが呼び出されている説は?
>>201 あふぉ。>>186,>>188
203201:03/05/18 12:16
>>202
前、デバッグでMessageBoxをWM_PAINTに書いて
びっくりするくらいMessageBoxがなかなか消えなかったので、
>>199さんがもし、知らないならと思って書いた。
>>186,>>188は知ってたよ。けど、書いた。念のため。
>>201
プログラム上は、WM_PAINT とか (と言うか、Socket 関係以外) が来たらそのまま DefWindowProc に渡しているだけ。
ウィンドは作ってるけど、非表示だから WM_PAINT は来ていない。
タスクトレイ常駐させて、左クリックで表示するようにしているのでその時にはじめて WM_PAINT が来ていることも確認した。

どうも、accept で失敗しているので再度メッセージが飛んできているみたい...、でも誰も DispatchMessage() してないはずなんだが。
MessageBox() 内で DispatchMessage() されちゃうのかなぁ...。

>>202
荒れるからアフォと書くなよ。
ちょっと上にも出てたんだから WM_PAINT の件ぐらいはみんな理解してると思う。
>>201
それはチミ、こういうことかね?

WM_PAINT → MessageBoxをウィンドウの上に出す → MessageBoxが消えると再描画発生
  ↑                                        ↓
  └―――――← ヽ(`Д´)ノ ウワァァン―←―――――――――――┘
>204
>MessageBox() 内で Dispatch...
これは無いだろ。独自のモーダルループに入るはず。
こういう場合はデバッガじゃなくトレースした方が良かろう。
それとMessageBox()の親を自分(非表示の)にしてない?
呼んだ時は知らんが、閉じた時に無条件に親が生かされたと思うから、この場合はデスクトックなどにするべきじゃろう。
はあ?上のメッセージボックス(や他のアプリ)が移動しただけでも、
Enable/Disableに関係無くWM_PAINTは来るでしょ。
>>206
「独自のモーダルループ」は別にウィンドウを制限してないから
しっかりDispatchされる
209デフォルトの名無しさん:03/05/18 18:27
ウインドーの中に四角いウインドーじゃ無い箱作ってドラッグさせたり
その箱クリックしてメニュー出したり糸をくっつけてくるくる回したりしたいんだけど
一番効率的なやり方教えてください
210デフォルトの名無しさん:03/05/18 18:34
>>209
WS_PUPOPWINDOW
そうすればドラッグ、クリック時にメッセージ。
描画は自己責任。
メニューは自作。またはオーナードロー。
が多分一番楽。
エディットコントロールを2つ並べて、
その境界線をドラッグで動かせるようにするにはどうすればいいですか?
>>211
エディットコントロールを包括するフレームウインドウを作り、エディットビューを形成する
>>206
> それとMessageBox()の親を自分(非表示の)にしてない?

MessageBox(0, ...) としてるから問題ないと思うんだけど。

>>207
EnableWindow() と混乱してない ?
ShowWindow(SH_SHOW or SH_HIDE) だよ。

>>208
ごめん理解できない。
MessageBox() 表示すると、システムが勝手に俺のウインドメッセージまで Dispatch しちゃうってことなの ?
メインループには戻ってないのに ?
スワップファイルとページファイルはどのように違う物なのですか?
俺は今までずっと一緒だと思い込んでいたのですが、↓を読むと別物のよう。
ttp://www.microsoft.com/japan/developer/library/vccore/_core_.2f.swaprun.htm

どこで聞いたらいいか分からなかったけど、ここが最も近そうに思えたので、
ここに書き込みました。より適切なスレが他にありましたら誘導をお願いします。
>>213
MessageBoxはシステムが勝手にユーザーのウインドウをDispatchするよ。
メッセージループしてなくてもMessageBoxが表示されてる間はしてるのと同じ状態になる。

多分MessageBoxで隠れた部分を再描画するためにWM_PAINTを呼び出す必要があるからなんだろうけど、
俺の場合はWM_PAINTとかじゃなく、WM_TIMERが呼び出されちゃってはまったからなぁ・・・
>>214
9x系だとスワップファイル、NT系だとページファイル
じゃなかったっけな
>>214
確かに、別物であるかのように呼び分けてるね。
誤訳かと思って米MSを確認したら、そちらでも呼び分けてた。
>>216
リンク先に「これはNT4.0の機能」とあるので、9x系は関係無いっぽい。
ページファイルが仮想メモリのことでスワップファイルは実際に作られるファイルのこと
219じいさま:03/05/18 20:49
セグメント: 1つのベースアドレスにオフセットを加えてアクセスする主記憶装置の論理範囲
スワッピング: セグメント全体を2次記憶装置にバックアップ/リストアすること
ページング: セグメントの部分を一定のサイズを単位としてバックアップ/リストアすること
>>215
なるほど確かに普通のアプリケーションでもダイアログボックスの後ろの領域の再描画はされてるから、WindowProc は呼び出されないとダメだね。
つーことは、WindowProc 内で MessageBox は使うのは要注意と言うことだな。

> 俺の場合はWM_PAINTとかじゃなく、WM_TIMERが呼び出されちゃってはまったからなぁ・・・

だねぇ、WM_PAINT とかならすぐ気付きそうなもんだけど、WM_TIMER とか Socket なんかだと関係なさそうだったから気付きにくいよね。

ありがと、1つ経験値が上がったよ。
221デフォルトの名無しさん:03/05/18 23:12
矩形内に文字列を出力するのにDrawText()を使っているのですが
エクセルのような「縮小して全体表示」をするのにフォントサイズを
0.1ポイントづつ減らしてループで矩形内に収まるかを計算しているの
ですが、これって専用のAPIで提供されているのでしょうか?
222デフォルトの名無しさん:03/05/18 23:17
Dispatchするというのは
日本語で言うとどんな意味ですか?
>>222
殺す
もっと一般的な意味があったと思うけど・・・
>>222-223
dispatch[dispトv]
v.t.
1 [III 名(副)]〈使者・軍隊などを〉(…に)急派[派遣]する;〈手紙などを〉(…に)急送[発送]する《to...》:〜 the Foreign Minister to the U.N. General Assembly 国連総会に外務大臣を(急いで)派遣する.
2 〈面会人などを〉さっさと送り出す;《話》〈仕事を〉手ぎわよくかたづける;〈食事を〉手早く済ませる:〜 a salesman セールスマンにお引き取りを願う.
3 〈人・動物を〉(とどめを刺して)殺す,「かたづける」:〜 a wounded deer 手負いのシカにとどめを刺す / 〜 to eternity 殺す.
-n.
1 U (使者などの)派遣,特派;(手紙などの)発送,投函(かん).
2 UC (人の)殺害,死刑執行.
3 U すばやい処理;迅速さ.
4 速達便;(軍事・外交などに関して送られる)公文書;(新聞記者の)特電;〔商〕(急行)運送;貨物(運送会社):the New York Times 〜 from Tokyo ニューヨークタイムスの東京からの特電.

語源 イタリア語より.もとはスペイン語 despachar(des-離れて+pachar 固定する=固定から離れる→急ぐ)
225デフォルトの名無しさん:03/05/19 00:06
win2000です。
ファイルからビットマップを読み込んで印刷したいと思っています。
その途中の、LoadImageを使ってbmpを読み込むところで苦戦しています。
下のようなコードなのですが、どうやってもNULLしかかえってきません。
当然、ファイルは存在しています。。。
なにかミスしてます?

char *fname = "c:\\temp.bmp";
hbmp=(HBITMAP)LoadImage (
NULL,fname,IMAGE_BITMAP,
0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
226デフォルトの名無しさん:03/05/19 00:11
>>225
第一引数
>>223
じゃあダブルディスパッチは心中?
>>227
二重派遣だな(゚∀゚)



                                 (´Д⊂ ウウ…
229デフォルトの名無しさん:03/05/19 07:17
>>225
とりあえずFormatMessageしてみそ
>>221
DrawTextで裏画面に描画、
StretchBltで裏のを表に縮小コピーの方がいいと思いますが。
231225:03/05/19 12:18
ヘルプは何度も読んだのですが、第1引数は第6引数にLR_LOADFROMFILEを指定していれば無視されるようなことが書かれていたのでNULLにしていました。
一応GetModuleHandle( NULL )と(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE )で試しましたが同じでした。

FormatMessageでは、「この操作は正しく終了しました」と出ます。
もちろん、LoadImageではNULLが返ります。

誰か助けてー
232225:03/05/19 12:42
DirectXのAPIで作成したBMPだったんだけど、そっちがおかしかったみたいです。
ペイントだと表示できるのに。
BMPのバージョンとかあるの?どうすりゃいいんだろう?(泣)
>>225
もうちょっと長めのコードを書いてみそ。他の所に間違いがあるのかも。
コードが長いなら以下のところに書くといいよ。
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
>>232
Yes。BMPには複数のバージョンがある。
235225:03/05/19 13:39
>>233
LoadImageに失敗するコードを貼り付けておきます。
ペイントで適当に作ったBMPでは成功しています。

>>234
その場合、LoadImage以外のAPIを使えば解決するの?

char *fname = "c:\\tempsurface.bmp";
LPDIRECT3DSURFACE9 backbuf;
AGlobal::GetD3DDevice()->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&backbuf);
D3DXSaveSurfaceToFile(fname,D3DXIFF_BMP,backbuf,NULL,NULL);
backbuf->Release();
if((hbmp=(HBITMAP)LoadImage (
NULL,
fname,
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION
))==NULL)
{
GetLastError()...
}
236233:03/05/19 13:49
>>234
バージョンってどんな?16色、256色、1670万色の事?それとも他にある?
>>232>>235
ペイントで開くと言うことはプログラムでの開き方がおかしいと言うこと。
僕が使うのはCleateFileか標準Cだから、LoadImageは余り分からないけど
最後の引数をLR_CREATEDIBSECTION|LR_LOADFROMFILE|LR_DEFAULTSIZE
にすると動?
237デフォルトの名無しさん:03/05/19 14:37
ステータスバーのサイズ変更用グリップのサイズって固定なんでしょうか?
それともデスクトップの設定によって可変なんでしょうか?
可変ならばグリップサイズを取得するAPI、もしくは方法を教えてください。
今のところグリップ幅15程度にハードコーディングしてしまっています。
接続されてるジョイパッドの情報を取得するAPI教えてください。
お願いします。
>>238
http://www.google.co.jp/search?q=%E3%82%B8%E3%83%A7%E3%82%A4%E3%83%91%E3%83%83%E3%83%89+api&ie=UTF-8&oe=UTF-8&hl=ja&lr=
なぜこの程度も出来ない?
インターネット上にいくら情報があるといっても、使う奴が無能である限り宝の持ち腐れ
>>239

掲示板で質問すれば、君みたいな親切くんが検索の仕方まで
教えてくれるからなあ。
241221:03/05/19 20:00
>>230
そんな方法があるんでつね。
やってみます。ありがとう。。。
242デフォルトの名無しさん:03/05/19 20:04
windowsフォルダーの中の起動に必要な重要なファイルとかを
使っている人にばれないように消去する方法教えてください
243デフォルトの名無しさん:03/05/19 20:06
>>236
LoadImageはDDB型。
CreateFile,標準CはDIB型。
DirectXは知らんが、編集はDIB型がいい。
DIB使うなら検索でBMPフォーマットから知れ。
244デフォルトの名無しさん:03/05/19 20:14
>>242
削除プログラム作って、
レジストリのキー「RUN」に追加する。
書き方は他のを参照。
スタートアップに入れる方法をあるが、
ばれやすそうなんで、そっちオススメ
マルチデスクトップ環境で、マウスカーソルがあるモニタの
左上のスクリーン座標かスクリーン座標系のRECTを取得したいのですが、
何かいい方法はありませんか?

POINT p;
MONITORINFOEX monInfo;
GetCursorPos(&p);
monInfo.cbSize =sizeof(monInfo);
GetMonitorInfo(MonitorFromPoint(p,MONITOR_DEFAULTTONEAREST), &monInfo);

として、
MONITORINFOEX構造体のrcMonitorでうまく取得できると思ったのですが、
実際作ってみるとうまくいってないみたいです。
よろしくお願いします。

246デフォルトの名無しさん:03/05/19 21:04
>>245
GetClientRectでデスクトップのハンドル使っても
駄目なのか?
>>246
それだとクライアント座標系での取得になってしまうので、
左上の座標は必ず(0,0)になってしまうと思いますし、
モニタの座標ではなく、すべてのモニタを囲む長方形(VirtualDesktop)の
左上、右下の座標が取れるだけだと思うのですが間違ってますか?

スクリーン座標で
(0,0) (1600,0) (2400,0)
┌───┬──┐
│1    │2 │
│ ├──┘(2400,600)
└───┘
(0,1200)(1600,1200)
のようなモニタ配置だとして、「2」のモニタのスクリーン座標(1600,0)-(2400,600)が
ゲットしたいのです。なにかよい方法はないでしょうか・・・。
激しくずれました。
すいません。
249デフォルトの名無しさん:03/05/19 22:19
>>248
レジストリにその情報がある可能性が高いと思われ。
あるかは知らんが。
250214:03/05/19 22:39
>>216-219
ありがとうございます。おかげで理解できました。
251デフォルトの名無しさん:03/05/19 23:54
Windowsのデスクトップ上のどこかで
IMEがON/OFFされたことを検出する方法はありますか?
252デフォルトの名無しさん:03/05/19 23:55
ホイールマウスのホイールを無効にするにはどうしたら良いでしょうか?
253デフォルトの名無しさん:03/05/20 00:06
レジストリーを完全に破壊するにはどうやったら良いですか?
バックアップとかあるのも壊したいのです
そのマシンの前に立つ。
次に
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>254
>>252
ホイールのメッセージを無視するとか
257(;´Д`):03/05/20 01:10
>>243
LoadImageでDIBも問題なく開けますが・・・
258動画直リン:03/05/20 01:11
LoadBitmap と勘違いしたんでしょ
>>243 悲惨だな
MSDN ライブラリ Visual Studio 6.0 には
Windows NT : LR_LOADFROMFILE はサポートされていません。
なんて事が書いてあるが
これってNT3.1の事だろうか…
>>261
あまり気にするな
>>245
GetMonitorInfoで駄目ならEnumDisplayMonitors使ってみたら?
あと、一応MonitorFromPointの戻り値を確認してみては?
>>252
詳細オプションで検出しない、にする。
AMDのOpteronで、Win32から
64ビットアプリケーションを作りたいんだが、アセンブラプログラムが必要?
C++Builderでできる?
64bit対応の命令含んだプログラムを作ることと
64bitアプリを作ることは違うのだが理解しているのだろうか?
DOSプログラムで32bit命令を使ったからといって
32bitアプリを作ったことにはならないのだが
馬鹿そうだから理解していないんだろうな
267デフォルトの名無しさん:03/05/20 09:45
後ろにExって付いてるやつと付いてないやつはどっちがいいんですか?
効果はほぼ同じですよね?Exの方が優れているのでしょうか?
>>267
ヘルプに書いてあるに何故読まない?
いくら盲目でも読み上げソフトぐらいあるだろう。
ヘルプにはAPIのことについて書いてないです
Delphi6per
>>269
何故MSDNのオンラインサイトを見ない?
>>268 >>270
このまえから、どうでもいい質問(ネタ)かいて、
かまってもらおうとしている奴だから、相手しないほうがいいよ。
このスレの存在意義がなくなるからです
自分で調べたんですけど、書いてあげようかなと思って^^;
273148 ◆Kg.N7J02zE :03/05/20 11:51
こんにちは,先日プリンタ設定の方法について質問した者です.
結局,OpenPrinterで開いてSetPrinterで設定しても,OpenPrinter
しているうちに他のクライアントがOpenPrinterしてSetPrinterできて
しまうことが分かりました.

(1) OpenPrinter():ハンドル取得
(2) Getprinter():現在の設定を取得
(3) SetPriner():印刷設定
(4) 印刷実行
(5) SetPriner():(2)で取得した設定に戻す
(6) ClosePrinter():終わり

の過程の途中で他クライアントから同じ過程を実行されてしまうことも
可能ということなんです。
プリンターの設定を変える過程で、他のクライアント
から同じPGで変更されてしまうと、プリンタ設定が元に戻らないという現象です。

識者の方、よろしければご教授下さい。
>>273
ヘルプに書いてあるに何故読まない?
いくら盲目でも読み上げソフトぐらいあるだろう。
>>273
てめーはプリンター使うなアホ
ボタンがフォーカスを得たときの点線を描画されないようにしたいのですが、
オーナードロー使わずにできる方法があれば教えて頂けないでしょうか。
k i e r o
278デフォルトの名無しさん:03/05/20 18:37
オーナードローしか方法は知らんが、どんなわけありでそんな奇妙な仕様にしたいのだ。
>278
何だこれ! CD-ROMがイジェクトされたぞ。
ほんとだ。
ブラクラの類だろうけど、面白そうだからクリックしちゃったよ。
>>281
おいおい。これウィルスだぞ
んなわけない。
ソース見ればわかる。
ただのVB厨のいたずらw
284276:03/05/20 19:25
>>279
ボタンが幾つか並んでいる状態でクリックを繰り返すと
点線が残って見た目がきれいでなかったので・・・
点線はとりあえずこのにしておきます。

スレの流れにばっちりはまった書き込みしてしまった
ようですみません。逝ってきます。
set cdaudio door open
286デフォルトの名無しさん:03/05/20 23:10
アイドル処理ってどうやってますか?
メッセージループにPeekMessageを使うとCPU使用率が100%になってしまうので
100ミリ秒でタイマーセットしたんですが、他に常套手段てありますか?
>>286
GetMessage() じゃ何か不満でもあるのか ?
GetMessage使ったらメッセージが来るまでブロックされてアイドル処理もあったもんじゃない
>>287
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0){
OnIdle(); // アイドル関数
TranslateMessage(&msg);
DispatchMessage(&msg);
}

こういうことでしょうか?
ペゾルド本5版(P235)にデッドタイムを利用するためにPeekMessageを使う方法が
あったのでてっきりPeekMessageを使うものだと思ってました。
GetMessageだとキューからメッセージを取り出すまで制御を返さないのですが
問題ないんでしょうか。
>>287のメール欄見ると切なくなってくる
ttp://www2.bbspink.com/test/read.cgi/erog/1050908540/l50
390あたりからどうぞ。
※低レベル注意
292あい:03/05/21 00:03
★グチョ濡れだけど見てくれる?★
オマンコを見たい人は画像をクリックして下さい

腿   \_  |  _/
彡彡彡
         ミミミミ クリトリス
          ミミミミ / ̄ ̄ ̄ ̄
         ノ σ ヽ 尿道
      / / ゜ヽ ̄ ̄ ̄ ̄
大陰唇  / //\\ \ 
 ̄  ̄    ( ( 膣 ) ── 小陰唇
       \ \\// /
         `   \/  '
\       *──肛門
  \_____/\_____/
http://jbbs.shitaraba.com/computer/2100/jsweb_1.html
>>289
Peekしてメッセージが着てなかったら
Sleep(0);しる。
>>291
アイドル処理とあんま関係ないような。
ふつうWaitFor系使うだろ
WaitFor系って待機は出来るけどアイドル処理挟めたっけ?
みんな「CPU使用率が100%」にばかり目がいって「アイドル処理」を忘れてやしないか…
>297
ヒントはでてるから無問題。
WaitForMultipleObjectsExでタイムアウトに100ミリ秒セットすればいいんじゃないか?
MFCのようにメッセージ後に一気に走らせるタイプならそもそもPeek/GetMessageで十分だし。
>>299
それなら別にGetMessageとタイマー使えばいいんでは
ゲームならまだしも普通のWinアプリでメインスレッドにSleepやWaitForを入れるもん?
>>300
同意
ちなみにMFCのアイドル処理は特定のメッセージ後はアイドル関数を呼ばないようにしたり、フラグ使ったりして呼び出し回数を抑制してるっぽいね
286はどういう処理がしたいんだ?
OnIdleは定期的に呼んで欲しいのか?
定期的に呼んで欲しいならSetTimerでも使った方がいいかと。
>>304
MFCがアイドル時にしてるようなこと、例えばメニューやコントロールの更新ハンドラを
実行したいと思っています。
具体的にはリストビュー内のアイテム数をステータスバーに表示させるといったことです。

そのため、定期的に呼ばれる必要はありますが、精度はそれほど気にしません。
なので、今のところタイマーで100ミリ秒程度にしてるんですが、もっと良い方法や
常套手段があるのなら教えて欲しいと思い質問しました。
>>305の用途だとSleep/WaitFor〜は使いませんよね?
>>305
それならそうとはじめから書け。
あまり感心しないぞ。
>>278
Set oWMP = CreateObject("WMPlayer.OCX.7" )
Set colCDROMs = oWMP.cdromCollection

if colCDROMs.Count >= 1 then
  For i = 0 to colCDROMs.Count - 1
    colCDROMs.Item(i).Eject
  Next
End If

ダサッ!For Each 使えよ。
>>308
(´-`).。oO(…使えたかなぁ?)

なんか前やってみてダメだった記憶があるんだ
>>305
PeekMessageでメッセージが無かったらOnIdleを呼んでからWaitMessageしる
int CWinApp::Run(void)
{
 bool bIdle;
 long lCount;
 MSG Msg;

 bIdle = true;
 lCount = 0;

 while(1){
  if (::PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE)){
   if(!::GetMessage(&Msg, NULL, 0, 0))
    break;

   if(!this->PreTranslateMessage(&Msg)){
    ::TranslateMessage(&Msg);
    ::DispatchMessage(&Msg);
   }

   bIdle = true;
   lCount = 0;
  }
  else if(bIdle){
   if(!this->OnIdle(lCount))
    bIdle = FALSE;
   else
    ++lCount;
  }
  else
   ::WaitMessage();
 }

 return Msg.wParam;
}
bool CWinApp::PreTranslateMessage(MSG *pMsg)
{
 return false; // trueを返すとディスパッチしない
}
bool CWinApp::OnIdle(LONG lCount)
{
  return false; // trueを返すと処理を続ける
}
おっと間違い

>>if(!::GetMessage(&Msg, NULL, 0, 0))
>>break;
if(Msg.message == WM_QUIT)
 break;
たびたび訂正

>>if(Msg.message == WM_QUIT)
>> break;

↑にすると動作がおかしくなる
↓のままでよかった

if(!::GetMessage(&Msg, NULL, 0, 0))
 break;
316デフォルトの名無しさん:03/05/21 05:33
みなさん、JPEGの保存てどうやってますか?
標準APIじゃでいないよね?ライブラリは何使ってる?
317名無し@沢村:03/05/21 05:42
libjpeg
GDI+
318316:03/05/21 06:03
http://www.smalleranimals.com/jpegfile.htm
のを試したんだけど、RGBのバッファから作成する方法が変な動作するんで
他のを使おうかと迷ってる。

DGI+は、↓にあるのを参考にやったら固まりまくったんで
抵抗あるっす。
http://user.ecc.u-tokyo.ac.jp/~rr26303/develop/gdiplus/gdiplus.html
フォルダを選択するダイアログってありますが
そのダイアログにフォルダを作成するボタンつきのが
ありますよね。
あれってどうやったらできるのでしょうか?
>>319
CreateWindowでボタンを直接作成、ダイアログをサブクラス化してメッセージを処理。
321デフォルトの名無しさん:03/05/21 09:23
>>274-275
設定の衝突を避ける方法は
MSDNにも載っていないことが分かってないDQN発見。
322319:03/05/21 11:10
>>320
なるほどー
やってみまつ
323デフォルトの名無しさん:03/05/21 12:42
>>316

VCL
>>315
>動作がおかしくなる
PeekMessageのPM_NOREMOVEをPM_REMOVEにすればいいんでないかい
325305:03/05/21 14:54
>>310>>311
ありがとうございます。WaitMessageがキーのようですね。
それで検索したところhttp://msdn.microsoft.com/library/en-us/dnwui/html/msdn_getpeek.asp
のようなページもみつかりました。(ページの一番下の内容)
>>311さんのはMFC実装のようにアイドル処理をやめたりメッセージをディスパッチする前に
何かしたりと、より細かく制御できるというものですね?
自分の用途の場合は>>310さんの方法で十分かもしれませんのでこちらでいきたいと思います。
広末涼子はアイドルか田舎
>>326 ?
>>311
一生懸命書いて憐れというかアホだな
プリンタのspooler設定を自分でしなければいけないのはけっこう妙な仕様の気もするが
下位APIなら当然か…

>>325
WaitMessageのかわりに
MsgWaitForMultipleObjectsでタイムアウト値を指定すれば
ある程度定期的にOnIdleを実行できる
別にタイマでもいいけど
330デフォルトの名無しさん:03/05/21 21:39
editorの窓の中に行番号ふるにはどうしたら
いいですかね。
もしかしたら、別窓
331デフォルトの名無しさん:03/05/21 21:55
■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc2.2ch.net/test/read.cgi/tech/1047949606/l50
ReadProcessMemoryの第2引数に渡す
ベースアドレスと言うのはどういうものなのでしょうか?

恥ずかしながら、とあるエロゲーのデータを個人的に
変えてみたくて色々調べたのですが、どうも良く分からなくて。
GameHackというシェアウェアの試用版で、目的の箇所の
アドレスっぽいのは分かったのですが、これをそのまま使っても取得できませんでした。
(「メモリロケーションへのアクセスが無効です」と出ます)

昔で言うオフセットとセグメントみたいなのが必要なのか、
あるいは0x400000辺りを引かなきゃとか・・・、
そのツールのアドレスが汎用的では無いのか・・・
自分なりに調べたのですが、さっぱりでして。

厨房エロパワー丸出しですが、本人至って真剣です。レス頂ければ幸いです。
DWORD val;

val=1;
if(WSAIoctl(sock,SIO_RCVALL,&val,sizeof(val),NULL,0,&d,NULL,NULL)==SOCKET_ERROR){
 printf("WSAIoctlErr:%d\n" ,WSAGetLastError());
}

を実行するとWSAEINVAL(10022)が帰って来るんですが、何故でしょうか?
unsigned intでやっても同じエラーです。どなたかヒント頂けないでしょうか?
>>333
アドミニ権限は?
エロは最大のモチベーションなり
>>334
レスthx
当然Administratorです。
WinXP/Win2000でテストしましたが、結果は同じです(´・ω・`)
Windowのサイズ変更をある単位ごとに制限する方法がよく分かりません。
つまり、例えば枠を掴んで8pxごとにカクカクとサイズを変えるような…
ウィンドウフックしてサイズ変更捕まえる。
WM_WINDOWPOSCHANGINGで弄るとか。
WM_SIZINGとか
>>335
まったくです<(*´∀`)
帰ってまでPCに向かうのは久しぶり
しかし、やはりレス無いですねぇ…

>>337
340さんも仰ってますが、WM_SIZINGで
wParamの値(WMSZ_RIGHTとか)を調べて、
場合分けでサイズ変えてくのが良いかも

lParam(=LPRECT)の値を変えると、そのままウィンドウサイズになりまする
>>332
普通に読みたいアドレスを渡すだけだよ。
他の引数に問題あるだけかと。
そのプロセスに対してアクセス権はあるの?
>>342
いやはや、おつき合いありがとうございます。

PROCESS_ALL_ACCESSで開いてはいます。
しかし、見当違いの値が入ってるとかならともかく、
エラーがでるってことは、仰るとおり他がダメそうですねぇ。

普通のアドレスで良いと、分かっただけでも助かりました。
もう一度ハァハァしながら見直してみます。レスありがとうございました。
そもそもアドレスが間違っているのではないかと…
あるいはnSizeがおかしいとか(0だとエラーになるのかな?)
345デフォルトの名無しさん:03/05/22 18:18
質問ですが、
InsertMenu等でシステムメニューを追加したのですが
その追加したメニューにサブメニューって作る事はできますか?
346 :03/05/22 18:43
どうでもいい事なんだがテンプレの、その3へのリンクが間違ってるぞ。
Build5から代々Duild11まで気付かないのは、それだけ過去ログを見ない人が多いのか・・・
正しくは
http://pc.2ch.net/tech/kako/1017/10170/1017072275.html

で過去ログさらっと見たところ無かったので質問させてください。
名前付きmutexの名前一覧を取得する方法はありますか?
何か過去ログ見ると、SPYでmutexの文字列見つけて・・・っていうのが
あったので、SPYで出来るんならAPIがあると思うんですが。。。
347 :03/05/22 18:48
>>345
CreatePopupMenu()でサブメニュー作る。
で InsertMenuItem() でメニューにサブメニューを追加、かな?
メニューバーとツールバーの境界線を消す方法は無いですか?
メニューを付けずにツールバーだけを付けたウィンドウの場合、
あの境界線が見えてしまってかっこ悪いです。
>>347
ありがとうございます。
早速試してみます。
350デフォルトの名無しさん:03/05/22 21:22
spy++のファインダーのアイコンですが、
ドラッグして他のウインドウの上にあわせたりできますよね
あれってどうやって実現してるんですか?
>>350
多分だけど、ドラッグされたらカーソルをファインダーのアイコンに変えて
逐一WindowFromPointあたりの関数使ってターゲットされてるウインドウを取得して
そのウインドウにドラッグ判定させて枠表示・・・みたいな感じじゃないかなぁ
Spy++の中身見てみないと分からないが
>>350
猫にそのものズバリが有ったりする
Windows2000やXPでタスクトレイに吹き出し型のメッセージボックスって
出せますよね。
あれをやりたいのですが、参考になるサイトとかありませんでしょうか?
>>354
さんくす。やってみます。
356質問:03/05/24 01:18
質問です。
親窓に子窓をはりつけて、子窓のウィンドウプロシージャ内で
WM_KEYを待っているのですが送られてきません。親窓に送られて
いるようです。マウスイベントは子窓で受け取れているのですが、
キーイベントはどうしたら受け取れますか?
357名無し@沢村:03/05/24 02:22
>>356
SetFocus()
358デフォルトの名無しさん:03/05/25 15:35
FILE_FLAG_DELETE_ON_CLOSEって
後から取り消すことはできないのですか?
ハードリンクしてもだめ?
>>671, >>681
Digital Mars C++がメインでOpenWatcomも入れてる。

OpenWatcomはコンパイラの他にIDE, vi風エディタ(日本語非対応),
アセンブラ, obj逆アセンブラ, リソースエディタと一通りそろっている。

各コンパイラの詳細は専用スレで聞いた方が早い。

タダで使えるBorland C++ part2
http://pc2.2ch.net/test/read.cgi/tech/1030493157/l50
OpenWatcom C++
http://pc2.2ch.net/test/read.cgi/tech/1033433728/l50
"Code of the Nerds" Digital Mars C/C++
http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
MinGWを使おう
http://pc2.2ch.net/test/read.cgi/tech/1042611308/l50
GCCについて part2
http://pc2.2ch.net/test/read.cgi/tech/1046179115/l50
タダで最強!フリーC/C++コンパイラ
http://pc2.2ch.net/test/read.cgi/tech/1035882599/l50
ぎゃあ、誤爆した・・・
スマソ。
VisualC++のWin32 ApplicationでRECT,POINT,SIZEの構造体をグローバル変数
として使うのは無理なんでしょうか?(関数内では使えることを確認してます)
インクルードファイルがwindows.hだけではだめとか?
>>362
できる。
なぜ、できないと思ったのかは知らんが・・・
ソンナおかしなことはないと思う。
365デフォルトの名無しさん:03/05/26 13:38
ハンドル、デバイスコンテキスト
この二つの言葉の意味を教えてください。
366デフォルトの名無しさん:03/05/26 14:00
ハングルと出歯亀コンテストの別名です
デバイスコンテキストのハンドルが必要になるファンクションとはどういったものですか
描画関連色々
デバイスコンテキストに対して何らかの操作を行うもの。
370 :03/05/26 15:16
>>365
ハンドルってかなり抽象的だよね。何にでも使えるし。
ようするに、ある何かのデータ空間の1つのデータに対する一意なindexの事だよ。
ハンドルっていうのは、車に付いてるハンドルと同じだよ
その車のハンドルが分かれば、その車を操作できるようになるよ
372デフォルトの名無しさん:03/05/26 15:49
netapi32.dllを動的リンクして
lngReturn = NetMessageBufferSend(NULL,address,fromname,(BYTE *)msg,sizeof(WCHAR) * lstrlenW(msg));
とした時にlngReturnの値がAPI本と合いません。
相手(送信先)が存在しない場合にlngReturn == 2273になるはずですが
225が帰ってきます。
何故でしょう?

373デフォルトの名無しさん:03/05/26 17:09
デバイスコンテキストハンドルのビギンペイントが
ゲットディーシーの意味など分かりやすく説明してください
ゲットディーシーが何をしてオブジェクトと構造体の関係なども教えてください
helpみろとか自分で調べろみたいな荒らしは放置でよろしくお願いします
374動画直リン:03/05/26 17:13
>>373
ネタにひねりがない
376デフォルトの名無しさん:03/05/26 17:27
MessageBoxで表示されるウィンドウの右上の閉じるボタンを灰色(無効)にするにはどれを指定すればいいんでしょうか
377 :03/05/26 17:36
>>373
なるほど、高度な釣りとはこうやるのか。
質問の回答ではないけどマジレスすると、
「何が分からないのか分かってから質問を書く」
「何から何まで全ていっぺんに教えてもらおうとする」
事はしない方がいいと思うよ。社会でもネットでも。
378 :03/05/26 17:37
「何が分からないのか分かってから質問を書く」

「何が分からないのか分かってないのに質問を書く」
379デフォルトの名無しさん:03/05/26 17:41
http://www.kenmon.net/

これってアリ?

380デフォルトの名無しさん:03/05/26 18:02
>>373
簡単に言うとHDCを値を返すもの。
あとの1H5Wは自分で調べろ。
Google逝け。
 >>377-378の言うとおりだ

381 :03/05/26 18:03
ビットマップのフォーマットを考えた奴は誰ですか?
爆弾を投げつけたいです。
>>381
どうぞ
>>379−383
384362:03/05/26 19:10
POINT giko = {2, 2};
だとうまくいきました.

POINT mona;
giko.x = 2;
giko.y = 2;
だとerror C2501,C2371が出るのは正常なんでしょうか?
>>384
gikoなのかmonaなのかはっきりせい。…というのはどーでもいいが、
グローバルでは変数/関数の"宣言"以外のことはできない。
> giko.x = 2;
> giko.y = 2;
代入とか禁止。
MessageBoxで表示されるウィンドウの右上の閉じるボタンを灰色(無効)にするにはどれを指定すればいいんでしょうか
387362:03/05/26 19:25
>385
なるほど.ありがとうございますた.
#monaはgikoの間違いでした.スマソ
388デフォルトの名無しさん:03/05/26 20:39
>>379
誤爆なんかな?
でも、
・例えば検問を知らずにシートベルトしない
・検問をしているのを知っているので、せめてその間はシートベルトする
では、どちらが本当に正しいのか。
389デフォルトの名無しさん:03/05/26 20:43
VC.NET みたいなインターフェースって
どんな風に実装されているの?ポインタだけでもいいんで教えてください。
390デフォルトの名無しさん:03/05/26 22:25
質問おながいします。m(__)m
ウィンドウのクライアント領域を任意に操作することは
できるのでしょうか?
例えばコントロールで上下左右に10ピクセルの非クライアント領域
を設けてそこはPGから触れないようにしたいのですが。。。
>>390
描画の制限だけならSelectClipRgn
392390:03/05/26 22:48
>>391
レスありがとうございます。
PGにはあくまで左上を原点として描画させたいので、できれば
リージョンではなくクライアント領域を変更したいのですが。。。
>>392
WM_NCシリーズで色々するんじゃなかったかな。
とりあえずクライアント領域のサイズ変えるのはWM_NCCALCSIZE。
>>392
それではSetViewportExtEx とか SetWindowExtEx とか。
395394:03/05/26 23:10
394を訂正
SetViewportOrgEx か SetWindowOrgEx
396390:03/05/26 23:21
>>393
スゴイ!APIではなくてWMなのですね。MSDNでも日本語訳のSDKドキュメント
がなく全く知りませんでした。

>>394-395
クライアント領域を触らずに実現する方法もあるんですネ。
PGはクライアント、非クライアントを区別せず、ただDCに
描画するだけなので、十分にいけそうです。

両方の方法で試してみたいと思います。
レスをくださった皆さんどうもありがとうございました。m(__)m
397デフォルトの名無しさん:03/05/26 23:23
ネットのバイト見つけた。バナー収入登録したら1000円くれるってさ。
http://members.goo.ne.jp/home/madcap0  
>>396
WM(Window Message)はAPIに送るメッセージ(定数)。てか、釣られちゃった?
>>398
?
400390:03/05/26 23:35
>>398
いえ、僕の書き方が紛らわしかったです。
クライアント領域に十分なウィンドウサイズを計算する
AdjustWindowRect()みたいな関数があるので、クライアント領域
サイズを変更するSetWindowRect()、SetClientRect()みたいな関数
もあるのかと思ったもので。。。
401372:03/05/27 00:53
372ですが、どなたもおわかりになりませぬか、残念
失礼しました<m(__)m>
402デフォルトの名無しさん:03/05/27 01:22
「ご迷惑をおかけして申し訳ありません」のエラーウィンドウを意図的に出すことってできますか?
>>402
RaiseException
ありがとうございます。さっそく調べてやってみます
405デフォルトの名無しさん:03/05/27 03:14
コマンドプロンプトに文字列を表示するにはどうすればよいのでしょうか。

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if(hConsole != INVALID_HANDLE_VALUE){
 TCHAR szMessage[] = "hello";
 DWORD dwWritten;
 WriteFile(hConsole, szMessage, lstrlen(szMessage), &dwWritten, NULL);
}

このようなプログラムをコマンドプロンプトから実行しても、dwWrittenは0で
何も表示されませんでした。
subsystemはconsoleでないといかんよ。
407405:03/05/27 05:40
>>406
てことは普通にexeをダブルクリックするとGUIアプリ、DOS窓から起動するとコンソールアプリ、
といったようなプログラムは不可能ということですか・・・ガクリ
ふつうに起動すると、GUIアプリ、
DOS窓から起動すると、「別のDOS窓を開く」コンソールアプリは
可能かもしらんが。
409デフォルトの名無しさん:03/05/27 18:41
他のスレから誘導されてやってきました。
よろしくおながいします。

DOS窓が起動しないコンソールアプリを作りたいのですが、
可能でしょうか。可能でしたら、ぜひやり方を知りたいのですが…。
VC++6.0です。
MFC-MLにも同じような質問が来た罠
>>409
AppWizardで「ダイアログアプリケーション」のスケルトンを作成し、CxxxApp::InitInstanceの
dlg.DoModal()付近をばっさり削除。
412デフォルトの名無しさん:03/05/27 19:22
hBitmap = LoadBitmap(hInst, "MYBMP");

猫でもわかるプログラミングでこのように使われていたのですが、
どうもこれではビットマップのハンドルが得られないみたいなんです。
何が間違ってるんでしょうか、どなたかアドバイスをお願いします。m(_ _)m
>>412
http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_loadbitmap.htm

"MYBMP"はリソース名
IDB_BITMAP1はリソースID、おわかりか?

しかし何ゆえ"IDB_BITMAP1"を"MYBMP"に変更したんだ?
それじゃ的確なレスは得られないぞ。
414412:03/05/27 19:45
失礼、猫でもわかるプログラミングさんの記載をそのまま書いてしまいました。
しかしIDB_BITMAP1にしてもうまくいかないです……どうしてでしょうか。

hBitmap = LoadBitmap(hInst, "IDB_BITMAP1");
>>414
お前少しは読め。
>>414
引数の意味がわかってないと思われ。
>>414
413のリンク先のパラメータのとこ見てみ。
>>414
エラーコードくらい調べろ。
419デフォルトの名無しさん:03/05/27 20:05
現在、小型のweb用の小型アクティブXを作成しています。
現在は、IPictureを用いて画像を読み込んでいます。

要件
1.IE5.01以降がインストールされているwindowsマシン上で動作すること。
2.PNGをHDCに書き込めること。
3.サイズが極力小さいこと(20kB位)。
4.できれば、IPictureのものは拡大縮小するとジャギーが目立つので目立たないよ
うにしたい。
5.jpeg、gifも表示したい。

以上のことをするには、windows内の機能を使うしかないと思っています。
IEはPNGを表示することが可能ですので、IEコンポーネントを使えばできそうなので
すが、、、。

なにか、ご存知の方いらっしゃいましたら、ご教授ください。
よろしくお願いします。
CloseHandle(>>414);
>>407
XPならAttachConsoleでできるかも
422 :03/05/28 00:20
>>407
現在の状態がコンソールかGUIかが分かれば、
それに合わせて別々のexeを起動させればいいんだけどな。
そういうAPIあるのかな。
判断するプログラムはどっちで(console/windows)つくるの?
フォアグラウンドウィンドウがコマンドプロンプトならば、CUIを起動
そうでなければGUIを起動で良いんじゃないの?
Launch.exe:起動時のフォアグランドウィンドウによってGUI.exe或いは
GUI.EXEを起動して終了するプログラム
CUI.EXE:CUIベースのプログラム
GUI.EXE:GUIベースのプログラム
COMMON.DLL:CUI.EXE,GUI.EXEで共通に使う
それじゃあ解決にならないよ。問題の先送り。

1.Launch.exeがsubsystem:consoleのばあい。
1.1.cmd.exeから起動した場合 ..OK
1.2.explorerから起動した場合
  Launch.exeの起動準備として、コマンドプロンプトが出現する..NG

2.Launch.exeがsubsystem:windowsのばあい
2.1.cmd.exeから起動した場合
  launch.exeの起動準備として、現在のコマンドプロンプトと切り離される..NG
2.2.explorerから起動した場合 ..OK
426吉岡美穂:03/05/28 08:13
>>419
GDI+なんかどうかしら。
gdiplus.dllは1600kB以上あるけど。
>>414

禿げしくガイシュツ
428デフォルトの名無しさん:03/05/28 09:30
>>426

GDI+は上司にだめといわれてしまいました。
IEは、IMGUTIL.DLLと、PNGFILT.DLLを使っていることはわかったのですが、
情報が公開されていないので、Dependency Warkerでこんな関数があるのかぁ。
ってところまでしか調べられませんでした。
PNGFILT.DLLもどっかのサイトでみたら,
zlibを使っているようなことは書いてありました。
MSがサポートしていないのであれば、やめたほうがよいといわれたので、
とりあえず、普通に、zlibとlibpngを入れて、エンコード部分は
削ろうかなぁと考えています。

429デフォルトの名無しさん:03/05/28 09:37
>>419

ATLのCImageにpng/jpg/gif読み書き機能が一通りあったはず。
拡大縮小は、HDCとってGDIでやれば良い(SetStretchBltModeを
忘れずに)。
429
CImageはGDI+だが。
431409:03/05/28 10:51
>>411
上手く行きました。
ありがとうございました。
助かりました。
>>425
subsystem:windowsで作って、コマンドプロンプトから起動されたことさえ判別できれば、
AttachConsoleで親のコマンドプロンプトに再接続できる。
XPならね・・・
HelloWorldアプリケーションを作って
WM_CREATE:で以下の処理をしたのですが、バルーンツールチップが
表示されません。どこがまずいのでしょうか?

InitCommonControls();
hwndToolTips = CreateWindow(TOOLTIPS_CLASS,
NULL,
WS_POPUP | TTS_NOPREFIX | TTS_BALLOON,
0, 0,
0, 0,
NULL, NULL,
hInst,
NULL);
if (hwndToolTips)
{
// Do the standard ToolTip coding.
TOOLINFO ti;

ti.cbSize = sizeof(ti);
ti.uFlags = TTF_TRANSPARENT | TTF_CENTERTIP;
ti.hwnd = hWnd;
ti.uId = 0;
ti.hinst = NULL;
ti.lpszText = "TEST";

GetClientRect(hWnd, &ti.rect);
SendMessage(hwndToolTips, TTM_ADDTOOL, 0, (LPARAM) &ti );
SendMessage(hWnd, TB_SETTOOLTIPS, (WPARAM)hwndToolTips, 0);
}
>>432
再接続はできるけど
cmd.exeはすでにプロンプトに戻ってるから何か不具合あるかも
cmd.exeが仮にWaitForInputIdleしてくれてたら、
タイムアウト前に接続できればうまいことやってくれるんじゃ?

…今度試してみよ
437山崎渉:03/05/28 12:27
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
タスクトレイアイコンのウィンドウハンドルはどうやって取得したらよいでしょう?
439デフォルトの名無しさん:03/05/28 14:00
_age
VisualC++6.0のSDKをバージョンアップしたいのですが、どこからダウンロードすればよいでしょうか?
ひょっとして既にサポート外でしょうか?
442デフォルトの名無しさん:03/05/28 22:36
3Dはどうやって表示するの?
赤と青のフィルムが必須。
いくら山盛りのWinAPIでもそこまで面倒見てくれません
>>442

DIBSectionさえ作れば、後はGDIなりフレームバッファ直接操作なりで
何でも自由に描画・表示できるよ。
システムフックしたツール作ってるのですが、
常駐していた状態で他のアプリケーションがでフリーズするとOS巻き込んで落ちてしまいます。
何か対策はありませんか?

システムフックは
アクティブウィンドウの変更を通知してるだけです。
447>>446:03/05/29 09:29
まず全裸になり、自分の尻を両手でバンバン叩きながら白目をむき
「びっくりするほどユートピア!びっくりするほどユートピア!」
とハイトーンで連呼しながらベットを昇り降りする
これを10分程続ければOK!
448デフォルトの名無しさん:03/05/29 10:30
スミマセン質問です
IEの選択文字の取得をしたいのですが
WM_GETTEXTが使えません。(当然なのかな…?)
クリップボード経由は可能ですがなるべく直接APIでたたきたいとおもっています。
>>442
擬似的に立体的に見えるように、輝度を上下させる(光の当り、影)。
2Dだろうが、3Dだろうが、所詮は点の集まり。だが、表示するまでの
計算がものすごく大変。
なんで誰もDirect3Dって答えてあげないの?
>>446
漏れもフックで悩んでる。
SetWindowsHookExでフックしてるんだけど
VCのデバッグモードに移行すると固まってしまう。
デバッグ時にはフックしないで開発してるんだけど
なんか、根本的な対策は無いのかな?
>>442
Direct3D
454デフォルトの名無しさん:03/05/29 16:20
ほんとに教えて下さい(泣
デバイスコンテキストの説明っていうか概念ていうか・・
淡々と説明しすぎ!そういう言葉を使えばいいってのは理解したけど、
頭で想像できないんだYO!
ハンドルはなんとなーくわかってきたんだけどね・・・
才能無い、やめろ
456デフォルトの名無しさん:03/05/29 16:42
才能とかじゃなくて、
検索したらいっぱい出てくるような気がするんだけど。
デバイスコンテキストの説明
>>457
おまいが買って、教えてくれよ
みんな飯代をうかせて本を買って勉強してるのだよ。
ネットを引けば分かる程度のこともする気力がないのかチミは
まあ、入門者にはプログラミングWindows第5版〈上〉は本気でオススメ。
最近だとWebだけでも結構知識を得られるものだが、それでもなお一読をすすめる。
値段以上の収穫は>>461が保証してくれる。
三年保証は別料金になりますが?
もちろん金利・手数料はジャパネット負担ですよね?
463デフォルトの名無しさん:03/05/29 19:02
プログラミングWindows第5版〈上〉
タケ−し、古いし、読み図例
図書館で十分
>>446,452
漏れも同じ事で悩んでる。フックはDLLにして使う場合が多いけど
今、WH_JOURNALRECORDでアプリの中に実装してるんだけど
ブレークポイントとか指定してデバッグモードに入ると落ちる(固まる)

でも、ここには、この問題を解決できる人がいない罠(w
YOU IS FOOL
>>464
あきらめてリモートデバッグしる。
>>465
そのネタなつかしい
YOU IS FOOD
>>467
You is a big fool man.だったっけ?>>元ネタ
>>442
OpenGL
>>470
DirectXは?
>>471
ガイシュツだからひねったんだろ
Shell_NotifyIcon で Win2000(Shell 5.0) 以降なら
バルーンのメッセージ取れるって MSDN に書いてるけど、

試したところ WM_CONTEXTMENU, NIN_SELECT, NIN_KEYSELECT は取れるが
NIN_BALLOONSHOW とかは XP(Shell 6.0) 以降じゃないと取れません。
何かやり方あるんでしょうか?

msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shell_notifyicon.asp
>>473
まず全裸になり、自分の尻を両手でバンバン叩きながら白目をむき
「びっくりするほどユートピア!びっくりするほどユートピア!」
とハイトーンで連呼しながらベットを昇り降りする
これを10分程続ければOK!
>>474
これって実際にやったことある奴は何人ぐらいいるんだろうね。
>>473
そこに書いてあるNIM_SETVERSIONとかいうのはどうよ
スクリーンセーバーが終了したり、モニタが省電モードから戻ったりしたことを知るには
どうすればよいですか?
最近の、このスレって
低レベルな質問->ぐぐれ or 本読め
中レベルな質問->まず全裸になり(以下略)
高レベルな質問->無視
って方向だね。
ム板の中で漏れでも住人になれる数少ないスレだよ。
┐(´ー`)┌
>>477
まず全裸になり、自分の尻を両手でバンバン叩きながら白目をむき
「びっくりするほどユートピア!びっくりするほどユートピア!」
とハイトーンで連呼しながらベットを昇り降りする
これを10分程続ければOK!
遅レス申し訳ないです。ネット繋げなかったもんで。
で、参照してくださって書籍はすでに持っています。上・下両方ね。
でもわかんなくない?サイトも、たんたんとデバイスなんたらかんたらハンドルとは〜〜
とか書いてあるけど、全然頭で浮かび上がらない。どんな風にCPUが働いてOSが教えてくれるのかとか
みんな頭で絵を浮かびながらコーディングしてない?俺はそうしてるんだけど
で、マジでわかんないんすよ(泣
ご指導お願いします
482JOJOの奇妙なAPI:03/05/30 12:35
第1回:ウィンドウハンドル(1)
講師:吉良吉影

フウウウウウウ〜〜〜
わたしは…子供のころ…チャールズ ペゾルド の「プログラミングWindows第5版」って
ありますよね…あの本…Laoxザコン館で見たときですね。

あの「オブジェクト」が必ず持ってる識別子・・・「ウィンドウハンドル」…
あれ…初めて見た時…なんていうか…その…下品なんですが…
フフ…勃起…しちゃいましてね…
「ウィンドウハンドル」のとこだけ切り抜いてしばらく…部屋にかざってました。

(第1回終了)
>>481
>どんな風にCPUが働いてOSが教えてくれるのかとか

そんなことを考える必要がなくていいようになってる。
今は、
「  考  え  る  な  」

最初にCをやったときに、
とりあえず「#include <stdio.h>」を書いとけ、と言われたろ?
それと一緒だ。
484デフォルトの名無しさん:03/05/30 13:07
>>464
グローバルフックを止めたらすべてのアプリに影響が及ぶんだから、無理だと思うのが普通でしょ。
485win32APIミッドナイト:03/05/30 13:22
講師:ACE後藤

>>481
windowsのウィンドウハンドルは識別子ですヨ
これからも全てのオブジェクトを指定するのはハンドルです
JAVA使ってる奴からみればハンドルなんて意味ないですヨ
でもやっぱりwin32API使う以上は必要だと思ってるワケです

各オブジェクトを確実に指定できる型でありたい
ただ ただそれだけですヨ――――

ハンドルはあってあたり前
それを特殊と思わない心なんですヨ

プログラム中どこで参照しても破綻はナイと思ってるんです
windowsというアンダーグランドな世界で
オブジェクトを指定できる型でいたいんですヨ
>>483
さんくす。他のレスくれたみなさんもありがとー。
そうういことにしときます。すいませんでした〜
ついに発覚、2chでレスを消す方法。
解析により、ついに管理人コマンド割り出しに成功した模様。
鯖が認識するとそのスレッドナンバーがあぼーんされる。

以下方法。
名前に『山崎渉』、メールに『ds8g15EG8h1r9R9g9d7E』。←暗号化されたパスワード
本文に、
command dell レスナンバー(ここに消したいレスナンバー記入)
end

こう記入して書き込み。
山崎って言う人はどうやらcgiなんかの管理人さんの本名らしい。
おそらく早急な対策が打たれると思うので、消したいレスがある人は急げ。
488473:03/05/30 15:07
>>476
レスありがとう。
NIM_SETVERSION 設定してるんですが
WinMe (5.50.4134.100) なら可能だったので
やっぱり shell32.dll のバージョンが足りない様です
5.0.3502.6144 なのに...
489山­崎渉:03/05/30 15:10
command dell 487
end
>>487
dellだって。学がないね。激藁
突っ込みどころが違う。絶対に違う。
492デフォルトの名無しさん:03/05/30 23:10
質問おながいします。m(__)m
Excel等でMDIの最小化、アイコン化ボタンがメニューバーにくっついて
いますが、これってどうやって実現しているのでしょうか?
493デフォルトの名無しさん:03/05/30 23:19
>>490
「DELete Line」の略なんだよ。多分。
GetGlyphOutlineでアンチェリのかかったビットマップフォントを取得したはいいんですが、
その後に文字をうまくアンチェリをかけて描画することができません

これって1ビットづつチマチマ調べて描くしかないんでしょうか?
できれば例なんかいただけると嬉しいです
>>492
? MDIの仕様に文句言いたいって事?
あそこ以外のどこに描けと...
>>496
どうやったらそんな解釈が・・・
>>495
テクスチャに転送してレンダリングすれば自動
499デフォルトの名無しさん:03/05/31 21:11
ツールバーのボタンを自力で描画したいのですが、方法がわかりません。
ボタンのウィンドウハンドルも取れないみたいですし、
どうやったらオーナードローができるのでしょうか。
SDKプログラミングでMFCのCArrayに相当する物は用意されていないのでしょうか?
>>499
>>500
まず全裸になり、自分の尻を両手でバンバン叩きながら白目をむき
「びっくりするほどユートピア!びっくりするほどユートピア!」
とハイトーンで連呼しながらベットを昇り降りする
これを10分程続ければOK!
502吉岡美穂:03/06/01 01:49
>>500
ないこともないわ
普通C++ならSTLコンテナ使うけどあれはAPIとは何の関係もないよな。
VARIANTの配列使うやつなかったっけ。

まあ、普通はstd::vectorだな
VC++のCreateWindowExでリストボックスのスタイルを
dwStyle:
WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_TABSTOP | LBS_NOTIFY
dwExStyle:
WS_EX_CLIENTEDGE
で作成したんですがスクロールが遅いです。
MSDNライブラリの「キーワード」みたいな
高速にスクロールするリストボックスはどの指定で行うのですか?
506デフォルトの名無しさん:03/06/02 02:26
コンソールアプリからウインアプリSDKに移ってプログラムを組んでいるのですが、
ウインアプリだと、文字のサイズが一定でないので困っています。同じにする方法
を教えてください。
507名無し@沢村:03/06/02 02:44
>>506
HFONT
>>506
フォントにはプロショーナルフォントと等幅フォントの二種類があるのじゃよ。
↓続き
>506
どう困っているのよ?
510デフォルトの名無しさん:03/06/02 02:58
DLLの中の関数が提供するダイアログボックスをタスクモーダルにする

(MessageBoxでMB_TASKMODALが指定された状態と同様の効果を得る)には

どのようにしたらよいですか?
お答えありがとうございます。

>>507
それで調べて見ると、猫の所にいけました。どこを変えれば出来るかは
分かりませんが。
>>508
TrueTipeのことですか?フォント自体にそれが決まっているのか、フォント
には関係なく、属性として与えるのかわからないです。
>>509
うまく説明できませんが、背景の色を変えた文字を使用していて、その位置
に同じバイト数の文字列を持ってきた時、コンソールなら前のがきれいに
消えて新しく表示されますが、サイズが変わって特に後のほうが小さい時は
前野が消えずに残ってしまいます。
>>511
ま、Windowsプログラミングの基礎からやっていけや
>>511
たとえば
「MS Pゴシック」とかがプロポーショナルフォントで、文字ごとに幅が違うの。
「MS ゴシック」は等幅フォントで、文字の幅が全部同じ。
>>512
はい。がんがります。
>>513
CreateフォントでMS ゴシックにしてもダメでした。他のパラメータが
違うのでしょうか。
hFont = CreateFont(32,//フォント高さ
32,//文字幅
0,//テキストの角度
0,//ベースラインとx軸との角度
FW_REGULAR,//フォントの重さ(太さ)
FALSE,//イタリック体
FALSE,//アンダーライン
FALSE,//打ち消し線
SHIFTJIS_CHARSET,//文字セット
OUT_DEFAULT_PRECIS,//出力精度
CLIP_DEFAULT_PRECIS,//クリッピング精度
PROOF_QUALITY,//出力品質
FIXED_PITCH | FF_MODERN,//ピッチとファミリー
"MS ゴシック");//書体名
>コンソールなら前のがきれいに 消えて新しく表示されますが、
>サイズが変わって特に後のほうが小さい時は
>前野が消えずに残ってしまいます。

これってプロポーショナル云々じゃなくて前回の描画領域を背景で塗りつぶせってことじゃないの?
「サイズが変わって」の意味がどうも分からない感じ。
フォントサイズが変わる、なの?
例えば100ポイントの文字を表示して、その上に10ポイントの文字を重ねて表示すると、
先に表示した100ポイントの文字が後ろからはみ出て見えてしまう、ということでは?
>>515
そうです。それを解決したいのもありますが、とにかく同じサイズに表示
したいんです。他の問題点としては文字列サイズを指定したものを縦に並
べて表示していく時、ベこぼこになってしまいます。
>>516
コンソールのはABCDEを表示、改行、abcdeと表示するとCとcは同じ位置に
表示されますよね。ただ、ウインの方は、かなりずれます。インターネット
でも同じですが。それを利用して面白いAAができたと言う利点もありますが。
ABCDE
abcde
>>517
そうです。1文字32ピクセルの"ABCDE"の上に、同サイズの"abcde"を上書き
すると、コンソールではabcdeのみ表示されますが、ウインだとabcdEと
なります。
DrawTextで矩形を指定じゃないか
>>519
それ見る限り、ちゃんとMSゴシックが表示されてないんじゃないかと
あぁわかった。>>514の書体名、「MS」は全角じゃないとダメだよ。
>>520
問題はそれではありませんでした。次に書きますが。
>>521
やってしまっていました。SelectObjectを入れ忘れていました。入れたら
出来ました。すいません。本当にごめんなさい。答えてくださったみなさま、
どうもありがとうございました。逝って来ます。
>>522
それは大丈夫みたいです。スペースを入れまくったりしても大丈夫でした。
システム登録済みの固定幅フォントを使うと簡単
HFONT hFont = (HFONT) GetStockObject(SYSTEM_FIXED_FONT);
HFONT hFontOld = (HFONT) SelectObject(hDC, hFont);
TextOut(〜);
SelectObject(hDC, hFontOld);
>>525
おおっいいですね。簡単にできます。ありがとうございました。
527510:03/06/02 09:42
>>510
自己レスっす。
手でガリガリ書くしかないようです。
EnumThreadWindows()でウィンドウ一覧を獲得し、
自分以外のウィンドウをEnableWindow(FALSE)して解決しました。
Windows画面(どのアプリでも)で
押されたキーボードのキーが何が押されたか監視し、
そのキーが押されたときに他のキーが押されたと認識されるやり方が解る方いますでしょうか?
よければ教えてください。

例:F12キーが押された場合CTRL+Numberキーが押された事にする。
という感じです。
>>528
SetWindowsHookExでWH_KEYBOARDを引っかける。
530デフォルトの名無しさん:03/06/02 14:35
質問させてください。
任意のアプリケーションが呼び出すWin32APIを監視(?)して、
自分で作成したDLL内の関数にすりかえる方法ってあるでしょうか?
自作DLLの注入は出来ても、Win32APIを偽装することは無理なんでしょうか?
531529:03/06/02 14:49
>>529
訂正。
WH_KEYBOARD_LLじゃないとダメかも。
532名無し@沢村:03/06/02 15:25
エクセルのようなワークシートをつくるWin32APIはどれですか?
>>532
MoveTo
LineTo
など
534名無し@沢村:03/06/02 18:31
>>533
MoveToとLineToの升目の中に文字や計算式を入力するWin32APIは?
>>534
APIつーかエディットコントロールでも貼り付ければ?
536デフォルトの名無しさん:03/06/02 18:43
沢村の質問キタ━━━━━━(゚∀゚)━━━━━━ !!
537名無し@沢村:03/06/02 18:49
>>535
MoveToとLineToの間の升目の数だけエディットコントロールを貼り付けるのか?
膨大な数のエディットコントロールができるな…
538名無し@村沢:03/06/02 18:59
>>537
ハローワールドの次の作品作っているのかな?
期待してるよん。
539デフォルトの名無しさん:03/06/02 19:22
すみません、質問があります。
プロセスの使用メモリを小さくする、最も一般的な方法を教えてください。
単にウィンドウを開くだけのプログラムでも、
2MB近く消費しているようなのですが…。
>>539
・スタートアップコードを自分で書く
・スタックを極限まで減らす
>>539
ウインドウを作成し表示したらいったん最小化して戻す
542539:03/06/02 21:04
早速のお返事をどうもありがとうございます。
>>540
スタートアップコードはいじったことがありませんでした。勉強してみます。
スタックを減らすというのは、具体的には何をすればいいんでしょう…。
>>541
画面表示状態によって使用メモリが変化するんですね。これは知りませんでした。
よく考えてみると、使用メモリが小さいプロセスというのは、
ウィンドウが表示されていないものばかりでした。
タスクマネージャを見ると使用メモリが小さなものがあったので、特別な方法が
あるものと思い込んでしまったのですが、私の早とちりだったかもしれません。
543デフォルトの名無しさん:03/06/02 22:55
見えないダイアログを作成しようとして

case WM_INITDIALOG: {
ShowWindow(hWnd, SW_HIDE);

のようにしていますが消えてくれません。
Windowを表示しないようにするにはどうしたらいいですか。
544 :03/06/02 23:05
Windowsの音量を調整(ボリューム)するAPIってわかりますか?
>>532
リストビューコントロールにLVS_EDITLABELSのスタイルを指定すると
エディット可能になるよ。
LVS_EX_GRIDLINESも指定するとグリッド線が描かれる。

>>543
ダイアログがメインウィンドウだと非表示にしようとしても、勝手に表示
された記憶がある。そうでないなら、普通に消せたかと。
546505:03/06/02 23:53
くっ、やはり高速リストボックスは無理なのか!?

>>543
その後、UpdataWindow( hWnd );
かな?(w
スペル間違えてたらスマソ
547530:03/06/03 01:24
ここで聞いたのは間違いだったようです。
>>546
うん、間違えてる。
UpdateWindowだね
>>543
それ、俺も昔悩まされた

DoModal()ではなくCreate()を使ってウィンドウ作成すれば表示されない
表示するときはShowWindowする

それとそのウィンドウ閉じたときは
OnCancel()は呼ばれずWM_DESTROYが送られる
その後DestroyWindow()してメモリ解放
>>547=530
APIフックなんてググればすぐに出てくると思うが?
>>537
いま編集対象になってる升にだけあればいいんでは。
升ごとにテキストバッファを持っとかないといけないけど。
552名無し@沢村:03/06/03 10:12
>>530
「Advanced Windows」買え
>>552
Windows 2000 Advanced Server?
554名無し@沢村:03/06/03 10:15
>>553
>>552
Advanced には載ってない
556デフォルトの名無しさん:03/06/03 11:06
「画面上の座標(x, y)で左クリック」という処理をプログラム適に実行するには、
どうすればよいでしょうか?
デスクトップのハンドルを取得して、WM_LBUTTONDOWNメッセージを
SendMessageで送信してみたのですが、上手くいきません。
おおざっぱでいいので教えてください。よろしくおねがいします。
557デフォルトの名無しさん:03/06/03 11:07
>>543
http://pc2.2ch.net/test/read.cgi/tech/1047949606/l50

で似たような質問があった。答えもあった。
558デフォルトの名無しさん:03/06/03 11:11
>>556
デスクトップではなくて、メッセージを送りたいウインドウのハンドルを取得しないとダメなんじゃない?
559直リン:03/06/03 11:13
>>556
mouse_event
>>556 よく質問の意味が分からないのですが、位置指定なら。
const int y=100,x=100;
case WM_LBUTTONDOWN:
if(LOWORD(lParam)!=x||HIWORD(lParam)!=y)break;
hdc=GetDC(hWnd);
TextOut(hdc,x,y,"指定した位置を押しました",24);
ReleaseDC(hWnd,hdc);
break;
562530:03/06/03 12:12
>>552
改訂第4版に追記されてたんですね。
以前の版を持ってるんで、買いたくないんですけど・・・。
どなたかソース貼って貰えませんか?
>>562
DLLの注入までできているなら
後はインポートテーブルを書きかえるだけじゃないか
GetProcAddressの返り値の加工も必要かもしれないが
564530:03/06/03 12:45
>>563
インポートテーブルの書きかえですか。
なるほど。ありがとうございます。
それくらいならAdvancedWindows買わなくてもなんとか出来そうです。
AdvancedWindowsでも同様の方法が記述されているんでしょうかね?
タイトルの所にFPS表示させるのって
相当オーバーヘッド大きい?
>>505
そのスタイルだけ見てわかるかw
項目が1万くらいあるっていうなら仮想リストボックス、
5億ぐらいあるんだったら仮想リストビューにしとけ
569デフォルトの名無しさん:03/06/04 11:42
ツリービューのノードがドラッグ中というメッセージをとらえるには
どうやったらよいのでしょうか?
570530:03/06/04 16:24
563>>567>>568
ありがとうございます。おかげさまで解決しました。

>>568
このように利用されているんですね。
ちなみに私はクラックではなくお仕事で使います。w
571デフォルトの名無しさん:03/06/04 16:54
>530
そのAPIを提供しているDLLをこういうの http://www.dependencywalker.com/ とかを
使って特定し、そのDLLに被さるDLLを作って乗っ取ればOKでは?
質問です。
VB6 SP5
Win2000
Exe起動直後にALT+F4を押し、そこで起きるイベント(QueryUnload)時に
GetMenuItemInfoを使って閉じるメニューの情報を取得しているのですが、
うまく情報を取得することができないです。
一度メニューバーをクリックした後にALT+F4をするとうまく取得できるのですが。
起動直後にうまく情報を取得するにはどうしたら良いでしょうか?

'×ボタンのメニュー情報を取得
With Mnu
.cbSize = Len(Mnu)
.dwTypeData = String(80, 0)
.cch = Len(.dwTypeData)
.fMask = MnuM_STATE
.wID = SC_CLOSE
lngRet = GetMenuItemInfo(hMenu, .wID, False, Mnu)
End With
>>542
SetProcessWorkingSetSize
最小化されたときはDefWindowProcか何かがこれを呼んでる
574 :03/06/04 23:36
mixer系APIを使って、ボリュームを調整したいのですが詳しく解説しているページとかありませんか?
言語はVC++6.0でMFCのウィザードを使ってます。
575539:03/06/05 00:17
>>573
おお、どうもありがとうございます。
でも、これが使えるのってNT系だけみたいですね…。
自分で作ったウィンドウの表示/非表示が変更されたことを知るにはどうすればよいのでしょう。
WM_SHOWWINDOW では表示/非表示が変更されようとしているタイミングで送られてくるので少しタイミングが早すぎます。
WM_SHOWWINDOW を DeWindowProc 関数に通した後でも変更はまだ反映されていないようです。
御存知の方どうか宜しくお願いします。
>>576
SPYでメッセージを追え
578528:03/06/05 13:46
>529さま
たいへん遅くなりましたが、ご回答ありがとうございますm(_ _)m
>>576
少し早いと思ったら、何か適当なメッセージを自分にPostしとくのはどうか
>>576
表示ならWM_PAINTとか
でもLonghornでだめぽになりそうな予感
>>576
WM_WINDOWPOSCHANGED
でWINDOWPOSのflagみればいい気もするが。
582デフォルトの名無しさん:03/06/05 23:27
ここでいいのか不安ですが質問させていただきます
WindowsでEXE単体で動くちょっとしたツールを作りました
ただちょっとだけセーブデータを保存したくなったんですが、datファイルなどをつくりたくありません
exeファイルのお尻に勝手にデータをくっつけて平気でしょうか

保存する(exeの最後にくっつける)データはおそらく文字列です
>>577-581
ありがとうございます。
>>577 氏の発言にしたがいSPYでメッセージを追っていたところ
WM_WINDOWPOSCHANGED が目的に適したメッセージのように思えましたので
WM_WINDOWPOSCHANGED を処理する方向で実装することにしました。
こんなにもたくさんのレスどうもありがとうございました。
>>574
ページとかは知らないけど多分mixer系APIを使う。
mixerOpenとかmixerGetLineInfoとか。
585584:03/06/05 23:47
と思ったらそこから先を知りたかったのね…、スマン
これくらいしか分かりません。

えーと。Windowsにはn個(大抵はサウンドカードの枚数)の
ミキサーデバイスがあって、各mixerデバイス毎にm個
(サウンドカードの種類による)のミキサーラインがあって、
とかいう概念が基本かな。

どのミキサーラインがWAVEなのかCDなのかLineInなのかというのが
サウンドカードの種類によって違ったりするので、
きっちりやるなら色んな環境でテストしないといけないとか。
>582
答える前にdatファイルを作りたくない理由を聞きたいと思うのはオレだけかな?
いじられたくないとか・・・

予めくっつけておいて、そこを書きかえればいいんじゃないかな。
とかいいつつできないけど。
CreateDIBSectionでビットマップのビットへのアドレスは分かったんですけど、
ピクセルのRGBを取り出す方法が分かりません。
24bitで。
589586:03/06/06 02:52
偉そうに書いたけど自分も解らないです。
でも個人用に作るとしてもリビルドしたら、それまでのが消えちゃうよなぁ。
普通に考えるとマズイと思うんだが...
平気かどうか以前に自分自身を書き換えられるの?
実行中のexeはシステムが開いていて書き込みオープンできないでしょ
>>588
24ビット.bmpのヘッダを除いた部分と同じ
591デフォルトの名無しさん:03/06/06 06:23
∩( ・ω・)∩モニュアゲ
592デフォルトの名無しさん:03/06/06 07:26
>>588

「DIBSection」で愚愚ればサンプルが見つかると思うが?
>>586-587
本当に「ちょっとしたツール」なので、ファイルが2個になるのが嫌なだけです
ぶちゃけ「ドラッグインしたファイルを、リストとしてtxtに吐き出すツール」なのですが
出力先の設定を保存しておきたいのです
レジストリは嫌いなん?
普通はiniファイルかレジストリだよなー
レジストリにせよiniにせよ、アンインストーラつきでないソフトで使うのはアレだが。
つことで、ちょっとしたツールには余計向かない気がするな。
>>596
じゃあ、何がいいの?
>>596
ツール自体に設定情報の削除機能を入れておけばいいだけの話
アンインストーラーなど必要ない
じゃあ、NTFS限定やけど、NTFSストリームにでも保存したら?
iniファイルだったら専用APIで読み書きできるし、datよりいいと思います。
601名無し@沢村:03/06/06 09:45
最近の流行はXMLだな
602_:03/06/06 09:45
603デフォルトの名無しさん:03/06/06 11:02
>>593
おいらだったらレジストリだな
インストーラやアンインストールは簡便に WSH で作っちゃえばよろし
604名無し@沢村:03/06/06 11:14
>>593
おまいがネット上にサーバを立ち上げて、全ユーザの設定情報を一括管理しろ。
>>593
exeA(本体)のリソースにexeB(Aをいじくってから自殺)を仕込んどく。
exeAの終了時にTempにセーブデータとexeBを切り離し、exeA終了。
exeBはexeAの終了(ファイル書き込みが可能になる)を待って
セーブデータの内容をexeAに書き込み、セーブデータを削除してから
exeBは自殺。

どーよ?
>>605
どう考えてもiniファイルの方が簡便。
そういうケースなら ini ファイルだろ。
インストーラのないソフトでレジストリは勘弁してくれ。
ここらへんは個人の好みなのかもしれないが。
>>607
おなじく。ちょっとしたツールなら迷うことなくINI。
レジストリはいくつもソフトを作ってて
しかもそれが関連してあるときしか意味が無い。

Aというソフトがインストールされていたら実行できるとかね。

ちなみにOSをよく再インストールするので
しょうもないレジストリの使い方をするソフトは
使わないようにしてる。
609605:03/06/06 12:36
>>606
いや、俺もそう思うけど、593の要望に遵ったまで。
( ・ω・)∩<先生。604は何が言いたいのかわからないです。
>>610
知障?
>>609
593の要望は
>ファイルが2個になるのが嫌なだけです
なので、>>609はその要望を満たしていないと思うがどうか。
設定はBIOSに保存
どうよ?
さらに、exeBがexeAを呼び出して、
exeAはexeB終了と同時にこれを削除し
exeAは、安心して終了
615デフォルトの名無しさん:03/06/06 13:19
レジストリ人気ないですなぁ
オイラはちょっとしたツールにも MRU リストが欲しいからすぐ
CRecentFileList 、ファイル名以外の設定を保存したい時はそれを
派生させたクラスを使う
すると必然的にレジストリに書き込むことになるわけで

.NET の実装見てると、DLL のシェアとレジストリって実はMSも後悔
しるようにも見えるが、オイラは↑で特に困った経験はないなぁ
>>615
開発者が困るんじゃなくてユーザが困るって話だろう。
だからツールに使ったレジストリの消去機能を入れておけばいいんだって
>>615
CRecentFileList使うときでもレジストリじゃなくてiniに保存できますよ。
CWinApp::InitInistance()で何かいじくればよかったはず。
M$はWin32以降レジストリの使用を推奨しているけど、本来レジストリは
COMやOCXのためのもので一般のアプリが使うのは良いとは思わない。
(シェルはバシバシ使ってるけど)
基本的には.ini形式だろな。これが何だかんだ言って一番安全。
レジストリの場合、こわれたら他のアプリも道連れ。
.INIファイルを秘密の奥深いフォルダーに隠しておく。すべてhidden属性
にセット。同時に100個位、多数ダミーを作る。一回毎にファイル名を
変える。他人にいじられないようにする方法なんていくらでもあるだしょ。
>>619
> .INIファイルを秘密の奥深いフォルダーに隠しておく。すべてhidden属性
> にセット。同時に100個位、多数ダミーを作る。一回毎にファイル名を
> 変える。他人にいじられないようにする方法なんていくらでもあるだしょ。

アフォということでいいですか ? > ALL
621デフォルトの名無しさん:03/06/06 14:41
レジストリファイルの構造わかりますか?
>>620
同意。
593はファイルを増やしたくないと言っているのに100個もファイル増やしてどうするよ?
それに論点は「設定を何処にどのように記録するか」であって「如何にしてファイルの改竄を防ぐか」ではない。
>>621
Windowsのバージョンによって違う。(95系、NT系では記録されるファイルから違う)
違いを吸収する為にWindows APIがある。
>>620
いいよ。
>>619
俺のマシン以外ならそれもあり。
一番最初に「暗号化」を思いつかない時点で>>619は(略
ていうか「いじられたくない」なんて誰も言ってねえし。
628デフォルトの名無しさん:03/06/06 16:44
暗号化と一言で言っても実際やってみればわかるが、非常に面倒で
後々必ず後悔する。真に有効な設定ファイルがどこにあるかさえ
アプリが知っていれば、設定ファイル方式にするのが良いと思われる。
ダミーを作る作らないは自由。作るのは万が一消された場合のバックアップ
の意味が大きいだろうね。
ただ意外に絶対に消されないような安全なフォルダーを発見するのが難し
い。
>>626で(略された部分

「天才に違いない。」
>>628
元の論点から外れるが、俺には暗号化の方が圧倒的に簡単に思える。
619のやり方ではプログラムはどうやって正しいファイルを知る事が出来るんだ?
ダミーが無数にあり、ファイル名が不定なんだぞ。

大体データの改変はユーザの自己責任で行われるもので
「絶対に消されないような安全なフォルダー」等を意識するのはおかしい。
それに暗号化が必要な情報は消されても全然困らない。
困るのは情報が漏れる事であり、そんなファイルを一般的な形式で記録するのは
危険極まりない。
暗号化ってXORするだけで効果ある?
ビット反転だけで十分
>>631
昔レインガルドというネットゲーがあったが
ローカルに保存するファイルにそれをやっていて
速攻でクラックされていた
>>631
632も言っているが、効果はある。
プログラミング出来る位の人間には解かれるかもしれないが、絶対に解けない暗号は
在り得ないので、データの重要性に応じて暗号化方式を変えるしかない。
タンスに隠すか、隠し金庫に保管するかで例えると、ビット反転はタンスに隠すかな。

>>628
>ただ意外に絶対に消されないような安全なフォルダーを発見するのが難し
>い。

NTFS限定だけどSystem Volume Informationとか。
636デフォルトの名無しさん:03/06/06 18:03
皆の衆、これ使え。
http://www.ntl.co.jp/2/product/plugin/
637デフォルトの名無しさん:03/06/06 18:05
IPアドレスからホスト名って取得できますか?
>>637
GetHostName()を使いなされ。
>>619=>>629
恥の上塗り。
629はただのネタだろ
つまらんけど
>>637
gethostbyaddrかWSAAsyncGetHostByAddr。
つか、レジストリ使うソフトを公開するのは止めろよな。
個人で使ってろ。
643デフォルトの名無しさん:03/06/06 19:43
レジストリーを使わないソフトって安いっぽいから俺は
レジストリーを使うソフトしか使いたく無いよ
レジストリーの使い方の分からない初心者がINIを使え
変な奴
設定をバックアップしやすいから.iniがいい。
もう完全にスレ違いだな
647デフォルトの名無しさん:03/06/06 20:41
こんばんは。
さっそくですが、ファイルが変更されたのを通知してもらうような
API はありますでしょうか?
数秒ごとにファイルが変更されたかチェックするのではなく
変更を OS から知らせてもらうようなイメージです。
よろしくお願いします。
>>605
「ちょっとしたツール」でそこまでやるのって
本末転倒というか目的のために手段を選ばないというか
手段が目的化してるというか
>>647
FindFirstChangeNotification
ReadDirectoryChangesW
でぐぐれ
実行可能ファイル書き換えると
ウィルスチェッカーに文句言われる可能性があるし
実行可能ファイルを読み出し専用の場所におけないし
あまりいいことないと思う
>>649
ありがとうごじあます。
さっそくぐぐります。
とりあえずお礼だけ先に^^
652デフォルトの名無しさん:03/06/06 23:03
現在 SwitchDesktop でデスクトップ切り替えをするツールを作っています
はじめのデスクトップをA、新しいデスクトップをBとしたとき
デスクトップをAからBに切り替えても消えないウィンドウを作るには
どうしたら良いのでしょうか?
SetWindowPosでできそうな気がしたんだけどできない...
653605:03/06/06 23:14
>>648
>本末転倒というか目的のために手段を選ばないというか
>手段が目的化してるというか
なんか普段の自分の事言われてるみたい…
自分への戒めとします。ありがd
654デフォルトの名無しさん:03/06/06 23:33
Hook ってクラス化できるの?
他のコールバック関数みたいに
パラメータ渡せないっぽいし

655593:03/06/07 01:15
皆様、たくさんのレスありがとうございます
大変勉強になりました

INI→ファイルが2つになる
レジストリ→嫌いな人が多い。ちょっとしたアプリ程度でレジいじくるなー
複雑な方法→複雑(;´д`)

なかなかままならないものですね
素直に毎回うたせるかな・・・
>>655
「ドラッグインしたファイルを、リストとしてtxtに吐き出すツール」

ショートカットにドラッグする。
本体はtxtと一緒に別のフォルダに置く。
Win32コンソールのアプリケーションを作っています。
で、興味本位でウィンドウを隠して、インジケータに
アイコンを登録してみました。ここまではいいのですが
うまく登録メッセージを受け取ることができません。
サブクラス化もできないし、メッセージのフックも
インストールまではできるのですが結局呼ばれないようです。

だれか、いい方法知りませんか?
>657
意味が分からん
・登録メッセージとは何か
・何のサブクラス化なのか
・何を対象にしたメッセージのフックか
ちゃんと書いてくれ
つかインジケータってタスクトレイのことか?
しかも、コンソールアプリケーションでか?
できんの?
質問の仕方が悪かった
HOOKした時に
SetWindowsHookExの引数に渡した、
HOOKPROC あるでしょ

あのコールバック関数内で、
GetWindowLongみたいに、
ユーザー側で指定した
パラメータ受け取ることって出来ますか?
         ∧_∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        (´∀` )  < 教えておながい
        (    ),,,,,  \____________
     / ̄ ̄ ̄ ̄ ̄/|
    ∧ ∧     / /|
  /_(  ,,)__/ / ┌──────
 || ̄/  | ̄ ̄||/  < ヤダ 
 ||, (___/   ||    └──────
  /
>660
GetWindowLongだったら、ウィンドウハンドルを取れていればできると思うが
663657:03/06/07 14:20
なんか適当に書きすぎたみたいで・・・スマソ

やっていることは

コンソールのウィンドウハンドル取得

ShowWindowでSW_HIDEを使って隠す

Shell_NotifyIconでタスクバーにアイコン登録
んで、このときにマウス関連のメッセージを受けるために
WM_APPあたりをNOTIFYICONDATA構造体の
uCallbackMessageにセットしておく

ここからが問題で
ウィンドウプロシージャは自前じゃないので
コンソールのウィンドウハンドルからサブクラス化して
メッセージをもらおうとしたけどだめ。サブクラス化できない。
(SPY++で見てもだめっぽい)

んじゃ、SetWindowsHookEx + WH_GETMESSAGEで
メッセージをフックしてみようと。今度はインストールはできるけど、
フックプロシージャを呼んでもらえないみたい。

んで、なんか他にいい方法思いつく人いませんか?

ってことなんですが、うまくできた人とかいます?(長文スマソ
>>663
隠しウィンドウを一個クリエイトしとけばいいんでないの?
しらんけど。
>フックプロシージャを呼んでもらえないみたい。
DLLにフックプロージャを置いてるか?
>>655
ちなみにその手のデータを置くべきフォルダの、Microsoftによるお勧めは
shfolder.dll内のSHGetFolderPathを使ってフォルダを取得せよ、ってことになってる。
CSIDL_APPDATAかCSIDL_LOCAL_APPDATAでしょうな。

>663
>664の方法に一票。
667657:03/06/07 18:35
いろいろレスサンクス
>664
>666
実はすでに隠しウィンドウのほうで実装は済んでるんだけど
コンソールでできないかなぁといろいろ試してみたかったんです。
もしできたら窓作る分のリソースの消費を抑えられるし。

>665
システムフックじゃないからいらないとは思うけど、一応作ってます。
あっ、もしかしたらシステムのフックにすればいいのかな?
試してみます。

やっぱだめみたい。

どうもコンソールは普通の窓とは仕組みが違うみたい。
どう考えても自前のWS_POPUPウィンドウ一枚のほうが
コンソールウィンドウよりリソース食わないと思うが
ListBoxを作成したんですが、途中で複数選択出来るようにするために
SetWIndowLongを実行したんですが、内容が変更できません。
・↑を実行した直後、GetWindowLongを送ると、どうやらちゃんと書きかえられているようです。
・InvalidataRect、UpdateWindowは指定しましたが、駄目でした。

// 複数選択
::SetWindowLong( hList1, GWL_STYLE, GetWindowLong( GWL_STYLE ) | LBS_EXTENDEDSEL ) );

::UpdateWindow( hList1 );
::UpdateWindow( hMainWin );
::InvalidateRect( hMainWin, NULL, TRUE );
::InvalidateRect( hMainWin, NULL, FALSE );
::InvalidateRect( NULL, NULL, TRUE );
::InvalidateRect( NULL, NULL, FALSE );
// ↑を送っても複数選択できず


もしかして、Window自体作り直すしかない?(^〜^;
670669:03/06/08 12:05
>>SetWindowLong
書き間違えた。
::SetWindowLong( hList1, GWL_STYLE, ::GetWindowLong( hlist1, GWL_STYLE ) | LBS_EXTENDEDSEL ) );
>669
仕様です。
672669:03/06/08 13:54
>>671
ノ---------]TOT[----------!!
673LBS_MULTIPLESEL:03/06/08 14:36
>>669
俺のことを忘れていないかい・・・
674669:03/06/08 15:04
>>673
無理でした。
最初から複数選択可能「LBS_MULTIPLESEL」or「LBS_EXTENDEDSEL」を付けて
ListBox作ると、途中変更が効かない。
何故だ……確かに、変わっているはずなのに…
675669:03/06/08 15:11
↑の付けたし。
一度、Windowを作ると、「複数選択」⇔「単一選択」への変更が出来ない。
>669
だから仕様だって。仕様っつうかSDKにちゃんと
「後でスタイル変更しても無効だよ」って書かれている。
取扱説明書を読むのは基本中の基本だよ。
677669:03/06/08 16:55
>>676
うそ!?ほんとですか!?
どこに書いてありました?
>>678
>except as noted.
がポイントだな。
680デフォルトの名無しさん:03/06/08 23:18
システムフックについて質問です。
CallNextHookExはいったい何をする関数なんでしょうか?
「次のフックを呼び出す」の意味がイマイチ分かりません。
アドバイスお願いします。
682669:03/06/09 00:32
>>678-679
激しくサンクス!
勉強不足だな…オレ。英語ニガテだし。
683デフォルトの名無しさん:03/06/09 01:12
ユーザーインターフェースをwin32api以外のなかに無い奴とかダウンロードできますか?
あるとこ教えてください
例えば丸いつまみを回すやつとか
684無料動画直リン:03/06/09 01:13
685_:03/06/09 01:13
>>683
MSDNを見れば、丸だろうが三角だろうが、好きな形のカスタムコントロールを
作成できるだけの情報は詰まっていると思います。
どこが出来ないかを聞いたほうがいいのではないでしょうか?
687デフォルトの名無しさん:03/06/09 01:22
>>686
初めから出来てる奴を使いたいのです
>>687
用意はされていないよ。凝ったコントロールは
そこの会社のプログラマが一生懸命作ったものだから。
そこに尋ねるのがいいと思います。
>>687
じゃあ、スレ違い。
>>689

これではまるで役所のたらいまわしだな(w
Windowsで ファンの回転数等を知るにはどうしたらよいのでしょうか?
Linuxでは Lm_sensorの出力を加工して使っていました。
みんな、だまされるな!
> win32api以外のなかに無い奴
だからつまりwin32apiのなかにある奴ってことだ!
ASM
694デフォルトの名無しさん:03/06/10 00:14
InvalidateRect()とInvalidateRgn()はどう使い分けるんでしょうか??
またUpdateWindow()とは。
Rgn+=Rect
Rgn+=Rgn

InvalidateRect(h,0,1);
SendMessage(h,WM_PAINT);
696デフォルトの名無しさん:03/06/10 10:14
複数のスレッドからアクセスされるintのグローバル変数にはvolatileを
指定したりしますよね。
でもなぜか基本型以外のグローバル変数にはvolatileをつけているのを見ません。
なぜですか?
それ本当にこのスレで質問する内容なん?
>>694
InvalidateRect()は、
指定した矩形を更新リージョンに追加する関数
InvalidateRgn()は、
指定した非矩形(矩形も可)を更新リージョンに追加する関数

UpdateWindow()は、
指定されたウィンドウの更新リージョンが空ではない場合、
ウィンドウへ WM_PAINT メッセージを送信し、
そのウィンドウのクライアント領域を更新する関数
>>697
そういうレスはいらないです。あなたの発言でみんなが関わり合いを
避けて結局回答が得られなくなります。

省いてますがintはvolatileなのに、クリティカルセクションやイベントハンドルなどが
volatileでなかったことから質問しているのです。だから安心してください。
>>699
いや、そういうレスもらわないように最初からそう書けよ。
ではそういう事情ですのでよろしくお願いします。
クリティカルセクションやイベントハンドルは
ユーザーの最適化コードが複数のスレッドから
直接触るわけじゃないから。
回答ありがとうございます。
つまりクリティカルセクションやイベントハンドルはそれらを扱う
APIが内部でそのことを考慮してうまく設計されてるからOK。
ということでしょうか?
Yes
非常に良く分かりました。ありがとうございます。
どうもお騒がせしました。

とまぁ、696はvolatileの意味を誤解したまま終わってしまったわけだが。
それはこのスレの守備範囲外だから
このスレ的にはクリティカルセクションやイベントハンドル
についてだけ答えてればOKでしょ
70851:03/06/10 12:56
API が考慮していようといまいと、自分でコードを追えない部分に volatile
が必要なほど過激な最適化は、少なくともMSのコンパイラではやらないと思うが
→じゃあ逆に int の引数については API が考慮してないって事か?
コンパイラの最適化対策とAPIの内部動作の問題は全く別なのだが
スレ違いだから誤解したままでいてもらおう
>>708
スレ違いだから微細は省くが最適化による無限ループにはまって悩むが良かろう
>少なくともMSのコンパイラではやらないと
馬鹿は痛い目を見なければわからん
すれ違いというルールを厳格に主張する奴は目的を見失ってるね。
例えそれが純粋にAPIに関することから始まり、最終的にはコンパイラや
OSの内部の問題になったとしてもそこまで指摘することは自然なことだし
議論としては継続しているじゃないですか。
そのことがスレッドを読みにくくするんですか。

スレ違いなどというものを厳密に守った結果、助言としては誤解を与え得る
中途半端なものになっては本末転倒だが、妙なこだわりに取り付かれた人たちに言っても無駄か。

>>711

どこかで見たようなバカだな。
713デフォルトの名無しさん:03/06/10 13:41
マルチスレッドの実行では volatile よりも何よによりも
ミューテックスやセマフォでロックかけてデータアクセスの同期
取る方が先に来るんじゃ
volatile 付けときゃOKというわけではあるまい
714694:03/06/10 13:51
>>698
遅レスですみません。
MSDNよりずっとよくわかりました。
どうもです。
>>712
あんたのほうがバカっぽいよ。
よーしパパ、スレ違いな質問をしまくっちゃうぞぉ。
>>696は明らかにスレ違いだぞ。
> 複数のスレッドからアクセスされるintのグローバル変数にはvolatileを
> 指定したりしますよね。
> でもなぜか基本型以外のグローバル変数にはvolatileをつけているのを見ません。
> なぜですか?
と問われても、基本型にvolatileの記述が強制されている訳でもないし、基本型以外に
volatileの記述が禁止されている訳でもないから、意図など分かる訳がない。
コーディングした奴に聞けとしか言えん。

> 省いてますがintはvolatileなのに、クリティカルセクションやイベントハンドルなどが
> volatileでなかったことから質問しているのです。だから安心してください。
何が安心してくださいだ。逝って良し!!
>>711
コピペに使えるな。もらっておこう。
719_:03/06/10 14:13
720デフォルトの名無しさん:03/06/10 14:42
>>715
この板から出てって下さい。ウザイです。
>718
ワロタ。オレももらうよ。早く使える日が来ないかな。
722デフォルトの名無しさん:03/06/10 16:16
ファイルの存在チェックとリネームの良いやり方ってありますか?
ShellExecuteとSHFileOperationをつかってたんだけど
もっとスマートな方法がありそうなきがして…
>>722
FindFirstFileとかMoveFileはどうよ?
>>722
それでいいんじゃないの。
俺もFindFirstFile使うけど、別にこれがスマートって訳じゃないし。
725デフォルトの名無しさん:03/06/10 16:53
すいません、質問させて下さい。
Windows2000のDocuments and Settingsフォルダのパス情報を取得するAPIってあるのでしょうか?
テンポラリフォルダのパスを取得するAPIがあるのは知っているので、このAPIで取得したパスから
フォルダ階層をさかのぼっていけば取れるとは思うのですが、もっとスマートな方法をご存知でしたら
アドバイス下さい。
よろしくお願いします。
>>725
SHGetSpecialFolderLocation
SHGetPathFromIDList
このへんを調べてみたら
>>725
GetProfilesDirectoryはどうよ?
>>725
SHGetSpecialFolderLocationでCSIDL_PROFILESが使えるはず・・・
>>722
存在チェックはPathFileExists使ってる。
Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later).
Windows 95/98/Me: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later).
だけど。
>>722
GetFileAttributesがエラー返したら存在しない。強引かも
>>725
CSIDL_PROFILES てのがあるではないか。
OSのバージョン知らないけど。
つーか、普通 FileExists じゃねえの?
>>732
どこの普通だ
>>733
WSHじゃない?
>>732
おまえみたいなのがいるからVB厨と言われるんだヽ(`Д´)ノウワァァァン!
>>735
いや、VCL厨かもよ
CSIDL_PROFILE
のすぐ上がすべてのユーザのルートだと思うよ。
738725:03/06/10 20:10
726、727、728、731、737さん、アドバイスありがとうございます。
まだ試してないんですが、まずはお礼を。
>>711
同意
迷惑だからスレ違い野郎を弁護しないでくれ
741デフォルトの名無しさん:03/06/10 21:14
質問お願いします。
SetBkColorで背景色を設定することは背景ブラシの色を(ブラシの種類は
そのままに)変更することと同じではないのでしょうか?
というのはRectangle()のときに内部の塗りつぶし色にSetBkColor()で
設定した色が反映されないもので...。
MSDNからでは読み取れないものでよろしくお願いいたします。
>>741
ttp://www.microsoft.com/JAPAN/developer/library/jpgdipf/_win32_setbkcolor.htm
この関数は、CreatePen 関数を使って作成したペンで描いたスタイル付きの複数の線の
隙間を塗りつぶします。しかし、ExtCreatePen 関数を使って作成したペンで描いたスタイル
付きの複数の線の隙間は塗りつぶしません。また、SetBKColor 関数は、TextOut と
ExtTextOut の各関数の背景色も設定します。

背景モードが OPAQUE の場合、背景色は、スタイル付きの複数の線の隙間、ブラシの
ハッチ線の隙間、文字の背景を塗りつぶすのに使われます。また、ビットマップをカラー
からモノクロームまたはその逆へ変換するときにも使われます。
SetBkColorはテキストの背景色だな
744デフォルトの名無しさん:03/06/10 21:30
>>742-743
テキストの背景色だけなんですね。
ずっとVBをやってたもので背景色全部だと思ってしまいました。
ありがとうございました。
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉




(^^)


   彡川川川三三三ミ〜
   川|川/  \|〜 プゥ〜ン
  ‖|‖ ◎---◎|〜        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  川川‖    3  ヽ〜      < (*´д`*)ハァハァハァ
  川川    ∴)д(∴)〜       \_______________
  川川      〜 /〜 カタカタカタ
  川川‖    〜 /‖ _____
 川川川川___/‖  |  | ̄ ̄\ \ ←>>1-1000
   /       \__|  |    | ̄ ̄|
  /  \___      |  |    |__|
  | \      |つ   |__|__/ /
  /     ̄ ̄  | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕
 |       | ̄


>>737
移動プロファイルでZ:\になっていた罠とかないの?
748732:03/06/10 22:41
ぐぁ、スレ間違えてたよ(;´Д`)
逝ってくる。
CreateThreadによって作成された複数のスレッドから
外部のDLLにある関数を呼ぶときは関数の呼び出しの前後を
クリティカルセクションで囲む必要があるのでしょうか?
>>749
ということはAPIを一つ呼ぶのにいちいちクリティカルセクションで囲んでいるのか?
クリティカルセクションを使うためには、それ自体も外部のDLLにある関数を使う必要があるが、
クリティカルセクションを使うためにクリティカルセクションを使うのか?
クリティカルセクションを使うためにクリティカルセクションを使うためにクリティカルセクションを使うのか?
クリティカルセクションを使うためにクリティカルセクションを使うためにクリティカルセクションを使うためにクリティカルセクションを使うのか?
>>749
その関数がやることに依存するんじゃないかな。
たとえば、グローバル変数やそれに類するものに全く触れない、
純粋な意味での関数ならば囲む必要はないだろうね。

それよか、どれかのスレッドが実行してる最中に
DLLがアンロードされないように注意したほうがいいと思う。
そのDLLの取扱説明書にスレッドセーフかどうかとか書いてませんか
753名無し@沢村:03/06/11 00:39
>>724
FindFirstFile()を使うのがスマートでないことは事実。
>>753
直接、プライマリブロックを読めるはず。
プライマリブロックは10年後でも変わんないよ。
755名無し@沢村:03/06/11 01:00
>>754
おまいはファイルの存在を確かめるだけのために、
ハンドルを開いて閉じるのはスマートではないと思わないか?
>>755
ごめん人それぞれ、でももっと早いのがキャッシュしているのが一番。
ごめん。
FindFirstFile以外で、もっとスマート(?)なやり方ってあるんですか?
今までずっとこれでやってきたんだが…
GetFileAttributes() は「属性の読み取り」権が無いと失敗するかなー
なんて思ったけど、そうでもないっぽい。
759デフォルトの名無しさん:03/06/11 03:37
OSがアップデートされたときなどに右下のタスクバーに吹き出しが
でるけど、あれってどうやって表示させればよいのですか?
なるべく自分で調べますので関連するキーワードをAPI名で
教えてください。
>>759
ウ・・・ザ・・・イ・・・
シ・ン・デ・・・
確かにあれはうざい
>>759
禁止しする方法をユーザーが知っているなら、
教えてあげても良いぞ。
WindowsUpdateの禁止の仕方も知らない馬鹿どもが、
WindowsUpdateがウザイからって、
タスクバーの吹き出し自体を嫌がっている。
こんなやつらはPGになってほしくない。
今PGなら今すぐやめろ。
ナニコノヒト?
いまコントロール上にマウスが数秒放置されたらポップアップヘルプを
表示するっていうの作ってるんですけど、マウスが数秒動かずに放置さ
れたことが分かるメッセージってあるんですか?
>>755 >>757
つーかさ、BOOL Exist(LPCTSTR pszEntry); みたいなライブラリ作ってないの?
細かい手段云々よりそっちのがよっぽどスマートじゃないやん。
>>766
そういうライブラリを作るためにもどんなAPIを使ってスマートに実装するかって話だろうが
768デフォルトの名無しさん:03/06/11 09:14
タスクトレイのポップアップメニューについて質問があります。

以下のように TrackPopupMenuEx を使って表示させようとしているのですが
ウンともスンとも言いません。
どこか記述の面でおかしい所とかあるのでしょうか?
よろしくお願いします。


Call SetForegroundWindow(frmMain.hWnd)

Dim hMenu As Long
Dim hSubMenu As Long
hMenu = GetMenu(frmMain.hWnd)
hSubMenu = GetSubMenu(hMenu, 0)

Dim TPMPARAMS As TPMPARAMS
Call TrackPopupMenuEx(hSubMenu, TPM_RETURNCMD Or TPM_RECURSE, 0, 0, frmMain.hWnd, TPMPARAMS)

Call PostMessage(frmMain.hWnd, WM_NULL, 0, 0)
>768
戻り値を見て調べるという手順は踏まないのかい?
>>769
マンドクサイので踏みません。
じゃああてずっぽで答えるしかないが
TPMPARAMSは初期化してるの?
>>765
TrackMouseEvent
773デフォルトの名無しさん:03/06/11 12:24
>>757
普通は GetFileAttribute() != -1 か PathIsExist()だろう。

>>766
わざわざそんなライブラリ必要ないよ。
FindFirstFileだとディレクトリの読み取り権がなくて
Traverseしか許されてないときに失敗するね
UsersでWINDOWS\TEMPを見るときとか
775759:03/06/11 12:59
バルーンの実装がわかるプログラマいないよねえ
なかなか
このQ&Aではレベル高すぎたか?
マルチして煽って・・・最悪な厨だな
>>775
なんかむかつくけど教えてやるよ。
http://homepage1.nifty.com/~okapon/download/delphi/tips1.html
779759:03/06/11 14:18
>>778
ありがとうございます
delphiのようですがvisual C++に応用できますか?
780デフォルトの名無しさん:03/06/11 14:23
めちゃくちゃ初歩的な事なんですが、

メッセージボックスに変数の中身を表示させるにはどう書いたらいいんでしょうか?

つまり、a=3でメッセージボックスに3と表示させたい
MessageBox(NULL, ?????? , "Title" , MB_OK);って感じなんですが・・・
|u^=)・・・
782デフォルトの名無しさん:03/06/11 14:30
>>780
ちょっとやってみりゃいいじゃん
MsgBox(a)
って書くだけじゃないか
>>782
VBとまちがえてませんか?
>>780
面倒だけど。
char buff[256];
wsprintf(buff, "%d", a);
MessageBox(NULL, buff, ....

てやってる。もっといい方法あるのかなー
785デフォルトの名無しさん:03/06/11 15:36
>>783
>>780において処理系の特定はなされていない
>>785
>>780で特定はされていないが>>783は渡し値の数からして.
VBじゃないと思ったんだろう。っていうかこのスレがWinAPIの
MessageBoxだろと思う気持ちで書いたと思うけどな>>783
787デフォルトの名無しさん:03/06/11 15:44
>>786
アチキなら
ShoeMessage(a);
と書いてしまいます

てか>>780で行末に;があるからC系だとわかるだろ
これだからVB厨は・・・
というツッコミでよろしいでしょうか?
788787:03/06/11 15:45
ウッ タイポ・・・
ShoeMessage(a); ではなく
ShowMessage(a); でした
チツレイ
789_:03/06/11 15:47
結局VBでもWinApi使えるからいいけどな
おれはVB使ってない。
791沢村:03/06/11 16:20
>>780
if (a==3) MessageBox(NULL, "3" , "Title" , MB_OK);
でいいだろ。
792450:03/06/11 16:44
aは実はchar a[255]とかだったら・・・
>>450みすった
名前に入れっぱなしだったすまんそん
>>793
オチケツ >>450でなくて>>792
795デフォルトの名無しさん:03/06/11 21:04
画面をクリップボードを通さずにに、
キャプチャする方法はありませんか?

見付けたページでは、サンプルソースが削除されてました。
探し方が悪いのかMSDNからも見付けられませんでした。

どなたかお教え頂ければ幸いです。
>>795
HDC hDC = GetDC(NULL);
でスクリーン全体のDCが取れる。
このDCを送り側、メモリDCを受け側に指定してBitBltすれ。
後始末はReleaseDC(NULL, hDC);
>788
SHOW-Aタンは元気にしてるだろうか・・・
>>790
使えるけどMsgBoxはAPIじゃなくてVBの機能だし
昨日からVB厨がいるな
Win2000 VB6.0
InitiateSystemShutdownを使って
リモートシャットダウンをしたいのですが、
シャットダウンはできるものの
「安全に電源を切ることができます。」という画面が出てきて
電源が自動切断されないんです。
何か設定があるのでしょうか?


>>800
HAL?
>>800
それはシャットダウンさせられる側のBIOS設定ではないかと
だから、なんでVBの質問をここでするんだよ。
InitiateSystemShutdown使ってるからじゃない?
VBのメソッドとWin32APIと混同したり
Win32APIの質問をVBと混同したり
最近ぐだぐだだな、このスレ。
806デフォルトの名無しさん:03/06/12 13:22
1つのexeを、スタートアップに組み込んで自動起動させたか、
その後にユーザーが任意で起動したかを判断する方法って
ありますか?なんかいいアイディアください。
よろしくお願いします
何処に逝ってもVB厨はウザイな
>>806
根本的に無理。
スタートアップのショートカットに専用のコマンドラインオプションを仕込くらいしか。
そうするとスタートメニューからたどられたときにアウト
自動起動させるのならスタートアップではなくサービスプログラムにすべき
>>803 >>807
APIの問題だろ。なんでそんなにつっかかる。
>>809
ターゲットはWindows95なのです・・・
812デフォルトの名無しさん:03/06/12 13:51
>>810
5番目の引数の説明をよく読めや、このVB厨。

MSDNライブラリより
===============================
bRebootAfterShutdown
シャットダウン後、即座にコンピュータを再起動させるかどうかを指定します。
TRUE を指定すると、コンピュータは再起動します。FALSE を指定すると、
コンピュータは、電源を切っても安全な状態になったことを示すメッセージを
表示します。
>>811
Windows95ならレジストリに登録するだけでサービスとして動くが何か問題が?
>>812
いちいちVB厨ってつけるな。それに俺は第三者だ。
もうちょっと頭を冷やせ。
>>813
それもサービスと呼ぶとは知りませんでした。
己の無知を恥じ入ります。
登録位置がRunServicesだし
>>814
いいんだよ、気に入らない奴にはなんでもVB厨のレッテルを貼って貶めて安心するんだから
VB厨もウザいが、頭の悪いアンチVB厨はもっとウザいな
819800:03/06/12 14:33
困ったなあ…
自PCだけならExitWindowExで電源断までできるんだけどね…
APIでリモートシャットダウン(自動電源断)は無理ですか?




820806:03/06/12 15:43
>>808
なるほど。でもbatファイルでコマンドを指定する方法ですと、
起動時に、コマンドラインの画面がでちゃいますよね・・・
821デフォルトの名無しさん:03/06/12 15:54
>>820
bat処理ではなく、専用のexeスターターを作って
コマンドラインを与えれば解決できるのでは?
だからサービスとして常駐させればいいんだって
そうすれば多重起動したかどうかで区別できる
Windows95ならレジストリに登録するだけ
そんなもの見分けてどうするんだろ。
explorerのデスクトップとファイラの切り替えみたいなことをさせたいんだろうか。
>>823
それもプロセスを殺してみれば分かるが、判別方法は多重起動しているか否か
825812:03/06/12 17:19
>>819
ExitWindowsEx()を呼び出すためのプロセスをリモートマシンで走らせといて
そのプロセスとソケット通信するってのはどうよ。
826795:03/06/12 19:59
>>796
ありがとうございました。
解決致しました。
827806:03/06/12 22:11
>>822
サービスとして常駐させる方法を教えてください!!
API教えてくだされば自分で調べます!!
>>827
RegCreateKeyEx
829デフォルトの名無しさん:03/06/12 23:59
他のアプリケーションの起動や終了を検地する方法はありますか?
830名無し@沢村:03/06/13 00:03
>>829
SetWindowsHookEx()
太閤検地
刀狩り
832名無し@沢村:03/06/13 00:27
ついでなので便乗質問。
WindowHookExで、Window作成をフックできるのは使ってみてわかったんだが、
プロセス開始そのものをフックすることもできるのか?

投入されたプロセスがウインドウを作らないとフックできない気がしてるんだが。
834757:03/06/13 01:58
>>773
??
PathIsExist()な関数無いんだけど…間違っているような気がするが
わからない。
>>833
WH_CBTでフックをインストールした後、
DllMain()がDLL_PROCESS_ATTACHでコールされたときがプロセスの起動、
DLL_PROCESS_DETACHでコールされたとき(UnHookした後は除く)が終了と
すればいいんじゃなかろうか。
836835:03/06/13 06:39
コンソールアプリがフックできるかどうかは忘れたけどね。

>>834
PathFileExists()の書き間違いだと思うよ。
GetTcpTable というAPIを使うために
iphlpapi.h というヘッダファイルを入手しなければならないのですが
PlatformSDK(?)はどこで入手すればよいのでしょうか?
>>837
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/
ここでええんじゃないかい。
>>835
フックDLLは最初にフックイベントが実行されるまでロードされない。
起動よりずっと後になる可能性がある。
デバッグしたほうが確実だな
>>838
日本語用があるわけではないのですね。
こっちはすでにダウンロード済みだったのでラッキーでした。
ありがとうございました。
自分自身がランチャー等から起動されているかどうか知る方法はありますか?
子プロセスから親プロセスのIDやハンドルを取る方法ってあるのでしょうか?
842デフォルトの名無しさん:03/06/13 18:47
DQNな質問で申し訳ありません
CALLBACK関数で

int height=200;

switch(message){
case WM_PAINT:
dc=BeginPaint(hw,&ps);
TextOut(dc,100,height,"漏れはDQNだ!",13);
EndPaint(hw,&ps);
return 0;

case WM_KEYDOWN:
if(wparam=='D'){
height=height-20;
}
return 0;
(省略)
}
みたいにやろうとしたら上手くいきませんでした。
どう解決すればいいでしょうか?
DQNすぎて何を答えてやればいいかわからん。
CALLBACK関数って何だ?何に使ってる?
コードを見る限りじゃウィンドウプロシージャか?
>>842
多分
>if(wparam=='D'){
>height=height-20;
InvalidateRect(hw,NULL,TRUE);
>}
そもそもheightが静的な変数じゃなかったりせんか。
>>841
Toolhelp32
847デフォルトの名無しさん:03/06/14 03:15
ツールチップの TTF_TRANSPARENT って何なの?
ググって見ても英語ばっかりで分からん、、、
真型フォントの背景を透過
849デフォルトの名無しさん:03/06/14 11:27
すみません、スプレッドシートコントロール(名前を間違って
覚えているかもしれません。表計算で使われる、罫線が引いてあり、
その中に文字や数値を入力する奴です。)
を作るには、CreateWindowEx()のクラス名に何を指定すれば良いのでしょうか。

WC_SPREADSHEETのような物があるかと思ったのですが、無いようなので…。
Googleしても、MSDN調べても、Excel/SQL/VBばかりでした……。
850841:03/06/14 13:08
>>846
ありがとうございます。

Toolhelp32やPSAPIでプロセスIDの列挙は出来るのは解りましたが。
自身との親子関係を判別するにはどうしたらよいのでしょうか?

Windowsにはプロセスの親子関係はないとの検索結果もあったのですが、
ProcessWalkerではツリー表示が出来ているので、継承関係みたいなものは
判別できると思うのですが…。
>>841
親プロセスのIDなら
CreateToolhelp32Snapshotでハンドル取得、
Process32First&Process32Nextで情報取得。
あとは取得したPROCESSENTRY32構造体の
メンバth32ParentProcessIDを
調べれば分かるんじゃない?

これでいいのか知らんがなぁ。
>843-845

static int h;
とすれば解決することが分かりました
有難うございます
853842:03/06/14 15:21
あ、

「InvalidateRect」の読み方教えて下さい
おながいします
854841:03/06/14 15:23
>>851
ありがとうございます。
XPを含めたNT系ではToolHelp32が利用できないという情報があちこちにあって、
PSAPIだとID(とそれから開くハンドル)しか取れないのでどうするのかと思いましたが、
試してみたらXPでも2000でもToolHelp32が使えますね…。
PSAPIを使用しなければいけないのはNT4以前ってことでしょうか?
856842:03/06/14 15:45
>855
有難うございます
InvalidateRectで追加した更新領域を無効にするにはどうしたらいいのですか?
更新領域の追加はできても削除や、クリアは出来ないの?
ValidateRect()
>>841

PSAPIなるものが何なのか初心者の漏れにゃ
分からんがMSDNに

Windows NT: Requires version 5.0 or later.
Windows: Requires Windows 95 or later.
Windows CE: Unsupported.
Header: Declared in tlhelp32.h.
Import Library: Use kernel32.lib.

ってかいてあるからそうなんじゃないの?
明らかに違うだろ >> 848
861849です:03/06/14 20:18
リストビューコントロールが使えそうなので、格闘してみます。
お騒がせしました。
MSDNにビットマップオブジェクトはメモリDCにしか
SelectObject()できないとなっていますが、これは
なんででしょうか??
デバイスが存在するDCに関連づけたら、出力先がビットマップになって、
デバイスが存在する意味がないから
>>863
なるへそ(・∀・)!!
_| ̄|○...
SleipnirとかOfficeXPの様なメニューを作りたくて
オーナードローまわりいじくってるんだけど
CreatePopupMenuで作ったメニューのメニューアイテムがオーナードローできる範囲より外側の部分
つまり、フレームの部分をフラットっぽくするやり方がわからない・・・

どなたか助けてー
>>865
これってシステムのメニューでなく自力でCreateWindow()するしか
ないんじゃないの?
LongHornだとサポートされるかもしれないけど...
CodeGuruあたりにOfficeXP風のメニュークラスのサンプルがあった気がするが。
868866:03/06/14 23:04
あるけど漏れの見たサンプルはエッジは3Dばっかみたい...
3DでもそんなにOfficeXPやVS.NETのメニューと見分けつかないけど。
NC系のmsgがあるのだろうか
869865:03/06/15 00:41
オーナードローじゃできんのか・・・
CreateWindowから作るのってかなり面倒だよね
メニューひとつ作るのもダルそう
MSも作り方ぐらいMSDNで公開してくれてもいいじゃないか!ヽ(`Д´)ノ

guru見回ってたらこんなもん見つけたよ。
ttp://codeguru.earthweb.com/menu/FlatPopUpMenu.shtml
これ見て色々やってみる!(゚∀゚)

つーことはレバーコントロールとかツールバーとかも
描画周り制御出来ない部分があったら、やっぱり自前か・・・?Σ(゚д`*;)
871デフォルトの名無しさん:03/06/15 01:15
>>865
メニューウィンドウに対してGetWindowDC でhdcを取得すればどこでも描画できます。
外部アプリケーションをSendMessageでメッセージを送って操作する
プログラムを書いています。

操作対象のウィンドウが画面に表示されている時は問題ないのですが、
対象がタスクトレイに収納されている時に、FindWindowでハンドルが
取得できなくなります。
対象アプリのウィンドウが非表示になってるわけで、ハンドルが取れない
のも頷けるんですが、このままでは目的を達せません。

そこで、とりあえず対象アプリをタスクトレイから引っ張り出したいの
ですが、この方法がわからずハマってしまっています。
どなかた判る方いらっしゃいましたら、ヒントいただけないでしょうか?
よろしくお願いします。
873851:03/06/15 03:18
EnumWindows関数を使って全トップレベルウィンドウを列挙すればいい。

その際、851に書いた方法で、あらかじめ全プロセスを列挙して、ほしい
プロセスのIDを得ておく。プロセスのパスは知っていないとだめだけど。

この辺の関数とかをうまく組み合わせてほしいウィンドウハンドルを特定、取得できれば
あとは、煮るなり焼くなり好きにできる。

ホントはもっといいやり方があるだろうけど漏れが知ってるのはこれだけ。

あと未知のソフトにNotifyメッセージを送るなら
PostMessageの方が安全かもしれないよ?

じゃ、寝よ。
874デフォルトの名無しさん:03/06/15 11:19
特定のプログラムに対してフックをかけるには、どんな方法がありますか?
全てのプログラムにかけるシステムフックはある程度使えるのですが・・・

おおまかでいいので、よろしくおねがいします。
特定のプログラムと同じフォルダにフック用APIラッパーDLLを置く
877872:03/06/15 16:14
>>873
その後わかったんですが、ウィンドウが非表示になっているからハンドルが
取れないわけではなく、対象アプリが、タスクトレイ収容と同時にウィンドウを
破棄、復帰時にまたウィンドウを作成、といった手順を踏んでいるのが
FindWindowが空ぶる原因でした。

で、結局、自分でマウスをクリックしてタスクトレイから対象アプリを引っ張り
出す様子を Spy++ で調べて、同じメッセージを送ってやることで目的を達し
ました。

どうもでした。
878デフォルトの名無しさん:03/06/15 19:36
RedrawWindow()という関数がありますが、これはどんなとき
に使うものなのですか?
UpdateWindow()とは違うのですか?
(MSDNを読んでもよく分からない(日本語訳もないため)ので
よろしくおながいします)
>>878
redrawは再描画だよね
Updateは更新だよね。
の違い
880878:03/06/15 19:50
>>879
再描画するにも更新するにもOSはアプリに
WM_PAINTを送る必要があるのでいっしょの
ように思えるのですが。。。
>>880
879が言ってるのはリビルドとビルドのような関係
882878:03/06/15 20:01
>>881
なるほど!!
883デフォルトの名無しさん:03/06/15 20:08
ケアルとケアルラの違いか!?
>>883
なるへそ!!
>>883
パパサンゲトーおめ
886デフォルトの名無しさん:03/06/15 22:15
論理ドライブ名から、物理デバイス名を取得するAPIとかってあるの?
>>886
それは、俺も知りたい。
どちらかと言うと、どのアダプタのどのターゲットにあるかだけでも知りたい。
(物理的な位置)
>>878
いったい、いつのMSDNを見てるんだ?
日本語のドキュメントはちゃんとあるだろ?
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_updatewindow.asp
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_redrawwindow.asp
>いつのMSDN
ワラタ
>>889
わらいダケでも食ったのか?
>>890
いや、リアルで強烈に古いリリース読んで騙されてた香具師を目撃したばかりで
>886
QueryDosDevice
>>887
SCSIデバイスに関してはASPIかSPTIで取れる
あるプロセスがどんなポートを使用しているか調べるAPIはありますか?
WinXPのnetstat -oだとプロセスIDが見れるので
そこから調べることができるそうですが
そのような機能を持ったものでもかまいません。
>>894
AllocateAndGetTcpExTableFromStack
>>895
レスありがとうございます。
わからなかったことが1点ありました。
これはMSの公式ドキュメントはないのでしょうか?
いちおうサンプルはいくつか見つけることができました。
第4と第5引数ともに"2"をセットしている例が多かったのですが
第4と第5引数の意味が理解できませんでした。
どういった意味があるのでしょうか?
>>896
非公開APIなのでドキュメント化はされてないね。
引数の意味に関してもサンプルを参考するか、
あとは自分で試すしかないと思うが
>>897
なるほど、やはり非公開でしたか。
もうすこし試行錯誤してみます。
ありがとうございました。
899デフォルトの名無しさん:03/06/16 21:41

 わしは886じゃよ

>>892

 QueryDosDeviceだと\\HardDriveXだっけ?
 そんなのが返ってくる。
 それではなく、PhysicalDriveXという形で
 返ってきてほしい。
 だれか、知らん?

>>887,893

 IOCTLでSCSI_THROUGH_DIRECTを投げる
 そのとき、CDBでSCSIコマンドのなんか(ちと失念)をセットしておく
 MtFujiを読めば、CDBで投げるコマンドはのっている


900デフォルトの名無しさん:03/06/16 21:49
> IOCTLでSCSI_THROUGH_DIRECTを投げる

 SCSI_PASS_THROUGH_DIRECT

 
901デフォルトの名無しさん:03/06/16 22:17
ファイルをコピーする前にディスクの空き容量を厳密にチェックしたい。
GetDiskFreeSpaceEx()で空き容量を取得できるけど、あれは単純な
空き領域が得られるだけで、実際にファイルをコピーできる限界は
セクタ単位で考えるとFAT32かNTFSかで微妙に違うはずですよね?

たとえばGetDiskFreeSpaceEx()で 100kB空いてるからといって、
99.9kBバイトのファイルをコピーできるとは限らないですよね?

902デフォルトの名無しさん:03/06/16 22:19
コーディングのお供に
http://mypage.odn.ne.jp/home/dongrico
903901:03/06/16 22:23
それとも、GetDiskFreeSpaceEx()で 100kB空いてるならば、
単純に残りクラスタ×クラスタあたりのバイトが100kB空いてると
考えてよい?


・・・ような気がしてきた。いいのかな。
904874:03/06/16 22:29
>876

すいません。もう少し詳しくおねがいします。
自分が予想するに、フックプロシージャが格納されるDLLに、プログラムを判別する値を
グローバル変数として保存しておくのではないかと思うのですが、実際にやろうとすると
上手くいきません。
>>903
大体、100KB空いていたとして、その瞬間に違うプロセスが使ったら…どうすんの?
>>901
圧縮ドライブの場合もっと大変だよ。がんばってね。
907901:03/06/16 22:43
>>905
とりあえず俺はSEサソの言いなりのヘポーコPGです。
>>906
はい。

今1kBほどのテキストファイル作って差を見たら
きっちり空き領域が8,192Byte減ってますた。
逝ってきます。
908デフォルトの名無しさん:03/06/16 22:45
>>907
話がかみ合っていないね
909887:03/06/16 23:24
>>893 >>899 >>900
情報ありがとうございます。
やっぱ、ASPIか、SPTIですか。ASPIは最近勉強したんでわかるんですが
SPTIとは何でしょうか?
おそらくWin2000等のNTで使用するのだとは分かるんですが…
DDKとかインストールする必要あるんですか?
SPTIの情報が少なくって……
SCSI Pass Through Interfaceの頭字語。そのまんま。
IOCTL_SCSI_PASS_THROUGH_DIRECTでぐぐったら解説が出てきた。
オープンソースのCD焼きソフト(cdrecord)のソースも参考になるかも
911887:03/06/16 23:49
>>910
ぐわぁ〜そっちか…MSDNとかでDDK直接探してて泣きを見ていました。
参考になりました。
サンクス!
912デフォルトの名無しさん:03/06/17 11:28
PlatformSDKはローカルにファイルを保存してセットアップできないんでしょうか?
PCを変えたんですが、もう一度Webからインストールするのはめんどうです。
>>912
過去スレにURL載ってたはず
914913:03/06/17 11:36
ああ!専用DLページがあったんですね!ありがとうございます!
916デフォルトの名無しさん:03/06/17 17:25
SetTimerを使った後にKillTimerを使わないと何か弊害があるのでしょうか?
917デフォルトの名無しさん:03/06/17 17:28
ネットで稼ぐならこれ。完全無料!!
リンクスタッフになれば小遣い稼ぎができます!!(左下に詳しい説明があります)
[報酬について]
クリック報酬・・・1クリックされる度に10円の報酬
バナー紹介料・・・リンクスタッフ登録の度に1000円の報酬
キャンペーン・・・今なら登録するだけで1000円プレゼント
間接報酬・・・紹介者が得た報酬の25%を加算いたします
プレミアム・・・優秀サイトには、報酬に応じてボーナス有り

単純に考えて1日100人クリックしたとすると、100人×10円×30日=30000円(一ヶ月)
そこらへんの掲示板に貼り付けていけば100クリックなんてスグです。
その他、自分の貼り付けた広告から誰かがスタッフになると1000円もらえるので
1日5人スタッフを紹介できたとして1000×5×30=150000円
30000+15000=180000!!間接報酬などもありますのでどんなに悪くても一ヶ月に10万円以上は必ず稼げます!!
          http://www12.ocn.ne.jp/~sihori/
       ぜひ一度覗いて見てはいかがでしょうか?
>>917
とてもよさそうですね(^^)
10万円稼げなかったときはどんな保証があるんでしょうか。
>>917
やって損しました。
920デフォルトの名無しさん:03/06/17 19:29
システムトレイにアイコン表示されるアプリをつくったんですが、
アイコンの色が256colorになっているようです。
フォルダにある状態では24bitcolorなのですがなぜ減色してしまうのでしょう。
おしえてちょ
16x16サイズなら256色で全ピクセルが表現できるから。
とか?
>>920
win2000以下は256も出ないよ。たしか16色くらい。
xpだけでしょ256も出るのは
アイコンって最大256色じゃないか?
924デフォルトの名無しさん:03/06/17 20:26
すみません。うそを書いたかもしれません。
要するにフォルダで見るとスモールアイコンはきれい

ダイアログの左上にあるスモールアイコンもきれい

でもシステムトレイに入れると色が化ける

です。スモールアイコンは256colorで書き直したほうがよいですか?
あとVisualStadioでアイコンのフォーマットの追加はできるけど削除
どうやりますか?
タスクトレイのアイコンは2000以下は16色だよ。
926デフォルトの名無しさん:03/06/17 21:39
ちょっとお聞きしたいのですが、
特定の文字が現在のフォントにあるかどうか調べるAPIってありますか?
(TextOutしたときに、きちんと表示されるか、空白 or "・"になるか)
927 :03/06/17 22:00
VC.NETで、ダイアログボックスでActiveXコントロールを張りつけるのではなく、
自分で作ったウィンドウにActiveXコントロールを張りつけるのは
どのようにすればよいでしょう?
CWnd::CreateControl()かなと思ったんですが、
落ちてうまく動かなかったです・・・・
>>926

無い。
>>928

そんなあ
GetGlyphIndices
>>926
メモリDCに書いてみてドット調べて・かどうかチェックすれ。
>>931
それじゃ・自体が判別できん
933916:03/06/17 23:00
教えてちょ!
>>930
おおー、サンクスです
>>933
いらないタイマイベントが発生しまくる
936916:03/06/17 23:53
有難うございます
アプリ終了後もタイマイベントが発生するでしょうか?
それともアプリが終了すれば大丈夫でしょうか?
>>936
普通ならタイマは停止する。
でも、Killで止めといたほうがスッキリヽ(´ー`)/
938876:03/06/18 00:48
>>874  亀レスでスマソ

875のやり方の手助けとして書いたつもりだったんだが・・・。

フックって何をフックしたいのかがよく分からん。
そのソフトが呼び出すAPIとかを横取りしたいのなら
568のリンクにそれ用のソフトがあるからそれを使えば
簡単に作れる。

それとも特定のメッセージとかを横取りしたいのか?
だったらSetWindowsHookEx + WH_GETMESSAGEとか。
939デフォルトの名無しさん:03/06/18 01:05
あなたが探してるのってこれだよね?この中にあったよ♪
http://endou.kir.jp/betu/linkvp/linkvp.html
940吉岡美穂:03/06/18 14:41
>>874
GetModuleFileName()で呼び出し側のファイルパスを取得して、
フックしたくないならDllMain()でFALSEを返せばいいのでは?

http://www.aderans.co.jp/
941916:03/06/18 15:59
>937
有難うございます
942デフォルトの名無しさん:03/06/18 21:05
論理フォント作成で質問です

stNCMetrics.cbSize = sizeof( NONCLIENTMETRICS );
::SystemParametersInfo( SPI_GETNONCLIENTMETRICS, sizeof( NONCLIENTMETRICS ), &stNCMetrics, 0 );
memcpy(&defFont,&stNCMetrics.lfMessageFont,sizeof(defFont));
defFont.lfWeight=FW_BOLD;
defFont.lfHeight=72;
defFont.lfItalic=true;
defFont.lfQuality=PROOF_QUALITY;
lstrcpyn(defFont.lfFaceName,"MS 明朝",15);//取りあえずこれで
hStatusFont=CreateFontIndirect(&defFont/*&stNCMetrics.lfMessageFont*/);//論理フォントの選択&作成

HDC DC=GetDC(GetWinWND());
SelectObject(DC,phStatusFont_);
TextOut(DC,0,128,"漢字",4);

イタリック名明朝が出るはずなんですが、普通(正体)のシステムフォントしかでてこない...

::SystemParametersInfo( SPI_GETNONCLIENTMETRICS, sizeof( NONCLIENTMETRICS ), &stNCMetrics, 0 );
このプロセスは元のFONTの一部を変えたいという意図からきています。
最初から全部値を入れても同じ結果なのです。なにが問題なのでしょうか?
hStatusFont=CreateFontIndirect
...
SelectObject(DC,phStatusFont_);

phStatusFont_って何?
944デフォルトの名無しさん:03/06/18 21:25
>943
hHANDLEです。
サンプルコード書く時のミスです。すいません。
その部分での問題ではないです。
パラメータに誤りがあるか、指定したフォントが無い場合
最も近いフォントをかってに選んで返す。


と思った。
だからLOGFONTには自分で値を入れないで
列挙してきた中から選べ
しかしMS 明朝のボールド・イタリックが無いとは思えないぞ
stNCMetrics.lfMessageFont が変なフォントになっているとか?

942のコードを試してみたけど、普通に斜体太明朝になるけどなあ。
949デフォルトの名無しさん:03/06/18 21:58
自己解決できました。ハンドルの参照が間違ってました(死
hhande型なのに何故ポインタ型で通ったんだ?w

スレ汚してすいません。
取りあえずそのミスを除いてはこのコードで論理フォントが作れるようです
フォント列挙がめんどくせーんだよな。
一度classつくりゃすむっちゃあすむことだが。
>>950
愚痴で950ゲットおめ。次スレよろ。
952デフォルトの名無しさん:03/06/18 22:17
zipfldr.dllを操作するAPIって公開されていますか?
953950:03/06/18 22:19
>このホストでは、しばらくスレッドが立てられません。
>またの機会にどうぞ。。。

だそうだ。
後は頼む。
954デフォルトの名無しさん:03/06/18 22:23
普段はユーザインターフェースを持たないプログラムとして
稼動してるけども、必要なときに応じてGUI画面を
表示させたいプログラムってどうやって作るんだろう…
タスクトレイ常駐型レベルじゃなくて、たとえばIISのような。
>>949
やっぱりphStatusFont_が原因じゃねーか、さっさと氏ね
サービスとして作ればいいのでは?
>>942
おれはいつもこうやって作っているんだが…
// フォントオブジェクト作成
hnewFont1 = ::CreateFont( 12, /* キャラクタセルの高さ(ピクセル) */
0,/* キャラクタの平均的な幅 */
0,/* 傾斜ベクトルとデバイスのx軸との間の角度(1/10度単位) */
0,/* 各キャラクタの基線とデバイスのx軸との間の角度(1/10度単位) */
FW_NORMAL,/* フォントの必要な幅 */
0,/* イタリック体ならTRUE */
0,/* 下線をつけるならTRUE */
0,/* 取り消し線をつけるならTRUE */
SHIFTJIS_CHARSET,/* キャラクタセット */
OUT_DEFAULT_PRECIS,/* 必要な出力精度 */
CLIP_DEFAULT_PRECIS,/* 必要なクリッピング精度 */
DEFAULT_QUALITY,/* 必要な出力品質 */
DEFAULT_PITCH | FF_DONTCARE, /* フォントのピッチとファミリの指定 */
"MS ゴシック" );/* フォント名 */
質問いいでしょうか.わかる方いらしたら,一発返答お願いしやす.
Win32コンソールアプリでキー入力をチェックしたりできますでしょうか?
コマンドプロンプトでどこまでやれるのか気になりまして.
getchar使うとか,そうゆうのではなく,,,ってなると,
結局イベントを扱えるかどうかにかかってきますね.
そうゆうAPIあるのかどうか,教えてえらい人!
vcならkbhitとか
>>959
どうもゴッツァンっす! 答えてくれてありがとう.アイリスペクトユー!
このスレ的にはReadConsoleInputとか言ってほしいところだが
>>961
押忍! kbhitでいろいろ調べていたら,
ReadConsoleInputにも自然とたどり着いたです.ありがとう〜
963デフォルトの名無しさん:03/06/19 08:58
すいません、質問させてください。

フォルダ内のファイル一覧を得るためのWin32APIはありますでしょうか。

ご存知の方、申し訳ございませんが、教えていただけたらうれしいです。
ある。以上。
>963
FindFirstGirl
FindNextGirl
>>965
FindFirstGirlが失敗するんですがどうしてでしょうか
>966
どっちで失敗してるんだ?
*.* ウフッ
>>967
どちらもリンクエラーになりまつ
もてない奴は探すだけ無駄ということだろう
FindFirstFile/FindNextFile
>969
冗談のつもりだったのだが・・・

俺の負けだ!


Girl(女の子/少女の意味、知らんのか?)をFileに置き換えよ!
さすれば汝は救われる。

つーかヘルプ読め!
リンクエラーの前にプロトタイプが無くて叱られると思うのだが・・・
Cならプロトタイプなくてもコンパイルとおらんか? 一応
>>954
IISと同じように…っつーなら、IISと同じようにサービスにすりゃよかろ。
IIS自体にUIはないけどな。
いいから次スレを・・・
>>977
では君に頼もう、次スレ立ててくれたまえ
痔スレですか?
イタイタシイデスネ
.NET Framework一回使うともうWin32APIには戻れないね。
戻れないというか、MFCと同じで結局足りない部分をWin32APIで補わないとやっていけない
>>965
良い関数だ…でも、俺の場合…

「0 個のGirlが発見されました」

になるのは何ででしょうか?(why
983デフォルトの名無しさん:03/06/19 22:20
PCで利用可能なCOMポートを全て確認(列挙)したいのですが、
全てのポートについてオープンを試みる単純な方法以外に
より正当な方法をご存知の方が居ましたら教授ください。
Webサイトドキュメント等へのポインタでも構いません。
984983:03/06/19 22:28
CodeProjectで見つかりました。
>>981
MFCよりも便利で、足りない部分をWin32APIで補うだけだからいいってことでしょ。
全部MFCやAPIでやる方法には戻れないよ。
次スレたてますた。

Win32API 質問箱 Build12
http://pc2.2ch.net/test/read.cgi/tech/1056033645
1000
1000!

σ   _、_
ヽ ( ,_ノ` )σ  989ゲッツ!!
 (    )ノ
   〉 〉
990BX
今だ! 991ゲットオォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
992ゲットだな
          ∧_∧
    ∧_∧  (´<_`  )さすがは兄者、中途半端だな
   ( ´_ゝ`) /   ⌒i
   /   \     | |
  /    / ̄ ̄ ̄ ̄/ |
__(__ニつ/  FMV  / .| .|____
    \/____/ (u ⊃
993デフォルトの名無しさん:03/06/22 13:58
              ∧_∧  〔^^〕
               _,( ´∀`)⌒ i  |
          (⌒ ー  一 r.、!  〉
           ヽ弋 。 人 。 イ(` ー'
           〔勿\     ヽ
               )  r⌒丶 )  ドカ
     ドカ   ドカ  /   !  |'´
       ドカ    /   /|  |‖ ドカ
             (    く  !  ||‖  ドカ
           ドカ   \  i   | ‖|‖|
            ,__>  ヽヽ从/∧∧
            ⊂⌒ヽ从/ つ ゚д゚) <993ゲトー
994デフォルトの名無しさん:03/06/22 14:06
ノノハヽo∈
从 `,_っ´) プッ
('A`) 995マンドクセ
996デフォルトの名無しさん:03/06/22 21:05
誰か!
987 名前:デフォルトの名無しさん :03/06/20 04:06
1000


988 名前:デフォルトの名無しさん :03/06/21 14:46
1000!
1000 (σ・∀・)σ ゲッツ!!
1000かよ!
1000!!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。