Win32API【2】
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
NGNGやさしいお兄さんたちが答えてくれるかも。
ただし、質問する前にまずMSDN読め。
MSDN Online
http://www.asia.microsoft.com/japan/developer/
前スレ
http://pc.2ch.net/test/read.cgi/tech/991576947/
0809デフォルトの名無しさん
NGNG書籍「Linkers & Loaders」じゃないのか、やっぱり。
>>808
そりゃ、実行ファイルをメモリに展開して実行できるようにする仕組みだろ。
DLL 使ってる場合とか、DLL にアドレスを割り付けて relocation する過程
などの詳細を知りたくなることもある。
0810デフォルトの名無しさん
NGNG漏れは面倒だからいつもDLLにしちゃうけど。DLLマンセー
0811デフォルトの名無しさん
NGNGhttp://www.iecc.com/linker/
0812API初心者の名無しさん
NGNGフロッピーやPCカードなどのボリュームシリアルを変更しようと思うのですが、
そのAPI関数がわかりません。
ヒントでいいので教えてください。
0813デフォルトの名無しさん
NGNGSetVolumeInformation()
0814API初心者の名無しさん
NGNGありがとうございました。
あとはMSDNで調べます。
0815API初心者の名無しさん
NGNG申し訳ございません。
MSDN調べたんですが、載ってなかったんで、
サンプルか詳細を教えて頂けませんか?
サンプルURLでも結構ですので。
0816デフォルトの名無しさん
NGNG使ったことないからよくわかんないけど SetVolumeLabel っていう API があるみたいだよ。
0817デフォルトの名無しさん
NGNGボリュームシリアル番号は変更できないっぽい
0818デフォルトの名無しさん
NGNG判定してくれるAPIってありませんかね?
いまのところ、CreateFileでリードオープンしてみて成功なら
存在する、ってやってますけど、なんかAPIであった方が
安心できるんですが…。
0819デフォルトの名無しさん
NGNGFindFirstFile
0820デフォルトの名無しさん
NGNGGetFileAttribute とか?
0822デフォルトの名無しさん
NGNGPathFileExists
ただしIE4.0以上がないと使えない。
0823818
NGNGうわー、まんまのAPIがあるんですね。
検索してみたんですけど、これって日本語のMSDNライブラリには
載ってない…。英語の方にはあったけど。
はぁ…普段から英語の方を使うようにした方がいいですかね?
ところで、最初っから「ファイル 存在 判定 API」でグーグレば
すぐに分かることでした…<判定用のAPI
それすらせずに聞いてた自分に気づいて、ちょっと鬱。
回線切って首つってきまーす。
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG一発やん。
0826ゾーナム
NGNGいや、俺もIE4を要求したいとは思ってませんので、PathFileExistsは、
その存在を知った、というだけにとどめておきますよ。実際に使うのは
GetFileAttributesの方です。
0827818(=826)
NGNG恥ずかしい…。
0828デフォルトの名無しさん
NGNG何度か試したのですが、うまく変換できないようで・・・。
0829デフォルトの名無しさん
NGNGバイトオーダーが違うとか、そっち系の問題じゃないの?
0830デフォルトの名無しさん
NGNGGetLastError() 夜露死苦!
0831デフォルトの名無しさん
NGNG0832デフォルトの名無しさん
NGNGGetLastError()してもエラーではなかったので変だと思ったのですが、
ご指摘のとおりバイトオーダーで駄目だったようです。
bomが付いてるからいけると思ってた私が馬鹿でした。
0833デフォルトの名無しさん
NGNG試してみたんですけど、本当にこれでいいのかどうかわかりません。
short nRepeat = (lParam & 0x0000FFFF);
char nScanCode = (lParam & 0x00FF0000) >> 23;
bool bExtendedKey = (lParam & 0x01000000) >> 24;
bool bAltKey = (lParam & 0x20000000) >> 29;
bool bPress = (lParam & 0x40000000) >> 30;
bool bUp = (lParam & 0x80000000) >> 31;
0834デフォルトの名無しさん
NGNGnScanCodeを得るには16bitシフトではないのか。
0836デフォルトの名無しさん
NGNGMSDNサンプルのTTY.Cを参考にしてるんですけど、
あのアプリって何をするものなのでしょうか?
ソースの前に、あのアプリの使い方がわからんです。
0837デフォルトの名無しさん
NGNG何か方法はないでしょうか?
GetClientRect は幅と高さしか返してくれなくて、座標は ( 0, 0) になってしまうようなのですが・・・。
0838デフォルトの名無しさん
NGNG0840デフォルトの名無しさん
NGNGClientToScreen()
0841デフォルトの名無しさん
NGNG#define FOO "def"
LTEXT "abc"FOO"ghi", ...
と書くと abc"def"ghi のように余計な " が付いてしまいます
これを abcdefghi と表示するにはどうすればよいのでしょう?
0842839
NGNGClientToScreen()で(0, 0)で望んでいた値を取得できました。
ありがとうございました。
0843デフォルトの名無しさん
NGNG環境によって違いがあるんでしょうか。
(画面32bit)
DDB >>> 8bit > 16bit≒32bit > 24bit
(画面16bit)
DDB >>> 8bit > 16bit > 24bit > 32bit
↑うちの環境ではこのような感じです。
DDBは加工しづらいし8bitじゃ色数が足りないんで
そこそこ速い16bitを使おうと思っているんですが、
環境によってこの順位は変わったりするんでしょうか。
0844デフォルトの名無しさん
NGNG0845デフォルトの名無しさん
NGNGそうでしたか。
それなら扱いやすさだけを考えて32bitにしようかな。
ありがとうございました。
0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNG0848846
NGNGIsIconic でしたか、ありがとうございます。
95以前からあるAPIは名前の雰囲気から探すの難しいです。
0849デフォルトの名無しさん
NGNGそろそろAPIバイブルを買って前ページ読破してもよい時期だな。
嫁。
嫁。
嫁。
昔はたったの800APIしかなかったから簡単だった。
0850デフォルトの名無しさん
NGNGForegroundID = GetWindowThreadProcessId(GetForegroundWindow(), 0)
TargetID = GetWindowThreadProcessId(HWND, 0)
で最前面とフォームのID取ってきて、
AttachThreadInput(TargetID, ForegroundID, True)
でアタッチして
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, 0)
でロック時間0にして、
BringWindowToTop(HWND)
SetForegroundWindow(HWND)
とやっているのですが、コマントプロンプトが最前面の時には最前面になってくれません。何ででしょうか?
0851デフォルトの名無しさん
NGNGそれは、君がタコだから
0852デフォルトの名無しさん
NGNG0853デフォルトの名無しさん
NGNGアーカイブにファイルをD&Dできるようになりますよね。
アレってどうやってるんでしょうか?
自分のアプリでエクスプローラと同じ挙動をさせたいのですが、
シェルエクステンションとか調べればできるようになりますか?
0854デフォルトの名無しさん
NGNG> でロック時間0にして、
はやめれ。
0855デフォルトの名無しさん
NGNGOLE D&Dを調べれ。
0856タコ
NGNG弄くってるウチになんとかなった。
>>854
先にSPI_GET〜で現在の値を保存しておいて、後でSETしなおしてますが。
0857デフォルトの名無しさん
NGNGWindowsはマルチタスクだ。保存してから元に戻す間に
別のプログラムが設定をいじったら破綻するだろ。
0858デフォルトの名無しさん
NGNG防ぐにはどうしたらいいんでしょう?
環境はBCC5.5 + Win2kです。
0859デフォルトの名無しさん
NGNGなんでOLEなんですか?
アプリケーションにDnDをするのではなくて、
デスクトップ上のアイコンにDnDできるんです
0860デフォルトの名無しさん
NGNGエクスプローラもアプリケーションですが…
ドラッグ&ドロップでのオブジェクト転送については、
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/transferring/transfer.asp
あたりが参考になるかと。
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNG送り側はちょいと面倒かも。
0863デフォルトの名無しさん
NGNG全て選択されるのは、Windows の標準動作。
なので、防ぐんじゃなくて、自分でその選択を消すと考える。
その EDITTEXT にフォーカスが来た時(EN_SETFOCUS が飛んできたとき)に、
EM_SETSEL メッセージを投げる。
0864デフォルトの名無しさん
NGNGつまり、エクスプローラで、
1.txt, 2.txtとかのファイルをドラグしていって、
a.zipというファイルに対してドロプし、
追記相当の処理をさせたい、と。
0865デフォルトの名無しさん
NGNGcase IDD_TEXT:
if(HIWORD(wParam) == EN_SETFOCUS){
SendDlgItemMessage(hdwnd, IDD_TEXT, EM_SETSEL, 0, 0);
return 1;
}
で、いきましたthx!
0866デフォルトの名無しさん
NGNGえっと、Explzhと同じことがやりたいのではなくて、
エクスプローラ側と同じ動作をさせたいのです。
zipがDnDを受け取るようになっていたら
自分のアプリでもzipへのDnDを許す、みたいな。
0867デフォルトの名無しさん
NGNG「Shell Extension」「Drag Drop Handler」あたりで検索してみろ。
0868デフォルトの名無しさん
NGNG> SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, 0)
は、Win98以降で強制的に SetForegroundWindowする場合の常套手段だけど、
行儀は悪い。まぁ仕方ないのかも。
>>866
俺もシェルエクステンション初心者だから間違ってるかも知れんが、
レジストリの HKCR->.zip のクラス名(と言うのか?)->shellex->DragDropHandlers
に有効な CLSIDが登録してあれば、シェルで D&Dを受け付けると思われ。
0869デフォルトの名無しさん
NGNGそもそも強制的にフォアグラウンドを奪うこと自体行儀が悪いんだから
多少の行儀の悪さは誤差の範囲なのかもな。
0870デフォルトの名無しさん
NGNG稀に、複数プロセスで1つのアプリケーションを構築した場合なんかは、
仕方なく使うんだけどね。
0871デフォルトの名無しさん
NGNGMFCだとメッセージマップみたいのでマクロ一発で済むみたいなんですが。
さすがに親Windowフックしてメッセージ投げ返してやるんじゃスマートじゃないし・・・。
0872デフォルトの名無しさん
NGNGHWND hwndCtrl = (NMHDR*)lp->hwndForm;
if (hwnd != hwnd)
return ::SendMessage(hwnd, msg, wp, lp);
;
break;
こういうんじゃないの?
0873デフォルトの名無しさん
NGNG0874デフォルトの名無しさん
NGNGメッセージリフレクションは、親Windowに手を入れなくていいというのが利点だ!ってMSDNに
書いてあったんで・・・。自前で書くならやむなしなのかもしれません。
0875デフォルトの名無しさん
NGNGあらかじめ書いてるかどうかの違いに過ぎないと思うんだが?
一度書いておけばそれ以上いじる必要ないだろ。
0876デフォルトの名無しさん
NGNGImmRegisterWordで文字列を登録させる処理なのですが、
IMEがデフォルトで登録してある語句をダブって登録させようとすると
関数が登録失敗で返してきます。
(例 語句”漢字”、よみ”かんじ”、品詞”名詞”)
失敗は良いのですが、その後エラーを取りたいのです。
MSDN等には、ImmGetGuideLineで取得できるとあります。
実際その処理を組み込んだのですが、戻り値がゼロで返却され
エラー内容を取得できないのです。
ガイドラインの情報タイプは”GGL_LEVEL”と”GGL_INDEX”で試してみました。
MSDNには
通常、アプリケーションはIMN_GUIDELINEメッセージを受け取った後に
この関数を呼び出します。と記載されてますが、
このメッセージがエラーが発生した際通知されないです。
もちろんWM_IME_NOTIFYのwParamで見てますよ。
詳しいかたよろしくお願いいたします。
0877デフォルトの名無しさん
NGNG既存のコントロールの子としてウインドウを作ったら、
その既存のコントロールをサブクラス化したりしないといけないからって話じゃないか?
0878デフォルトの名無しさん
NGNGそれはMFCだって同じだろ?
単にMFCが自動的にやってくれるかどうかの違いだけで
0879874
NGNG要するに、こんな便利な機構がWin32APIセット自体には含まれていないんだなーって
ことです。ウィンドウスタイルにリフレクションを行う、なんてのがあれば結構使える
と思うんですが。
0880デフォルトの名無しさん
NGNG親に通知するという仕組みが糞なだけじゃないか?
0881874
NGNG自分自身へのnotifyがデフォルトで、親に通知するメッセージを(簡単に)選べる
方がスマートなのかもしれません。浅はかな考えですけど。
0882デフォルトの名無しさん
NGNG書けば済むから、普通だったらそっちの方が楽。糞というほどのことはないと思う。
サブクラス化とか絡まない限りにおいては、だけどね。
0883874
NGNGカラムの順番を入れ替えたりできます。
ヘッダの境界線をドラッグすると幅を変更できます。
これらを検出できないでしょうか・・・。LVN_*はなさげです。
0884874
NGNG0885デフォルトの名無しさん
NGNGHDN_*にありそうだけど。
0886874
NGNGそれからヘッダーコントロールの親がリストビューだということに気づくまでに
数十分。しばし格闘してみましたが、HDN_BEGINDRAGとHDN_ENDDRAGはつかまえ
られました。
しかし!境界をドラッグするのがつかまえられません。HDN_*はすべてハンドリング
してるのですが、それ以外のWM_NOTIFYが来てるようです。試しにHDN_*以外のすべて
のWM_NOTIFYに対してTRUEを返してみたら、境界ドラッグを防ぐことができました。
spy++でウォッチしてみたんですが、WM_NOTIFYであることしか教えてくれないんで
どうしようもなくなってしまいました。ヘルプ!
0887874
NGNGcommctrl.hからの抜粋です。
#define HDN_ITEMCHANGINGA (HDN_FIRST-0)
#define HDN_ITEMCHANGINGW (HDN_FIRST-20)
#define HDN_ITEMCHANGEDA (HDN_FIRST-1)
#define HDN_ITEMCHANGEDW (HDN_FIRST-21)
#define HDN_ITEMCLICKA (HDN_FIRST-2)
#define HDN_ITEMCLICKW (HDN_FIRST-22)
#define HDN_ITEMDBLCLICKA (HDN_FIRST-3)
#define HDN_ITEMDBLCLICKW (HDN_FIRST-23)
#define HDN_DIVIDERDBLCLICKA (HDN_FIRST-5)
#define HDN_DIVIDERDBLCLICKW (HDN_FIRST-25)
#define HDN_BEGINTRACKA (HDN_FIRST-6)
#define HDN_BEGINTRACKW (HDN_FIRST-26)
#define HDN_ENDTRACKA (HDN_FIRST-7)
#define HDN_ENDTRACKW (HDN_FIRST-27)
#define HDN_TRACKA (HDN_FIRST-8)
#define HDN_TRACKW (HDN_FIRST-28)
#if (_WIN32_IE >= 0x0300)
#define HDN_GETDISPINFOA (HDN_FIRST-9)
#define HDN_GETDISPINFOW (HDN_FIRST-29)
#define HDN_BEGINDRAG (HDN_FIRST-10)
#define HDN_ENDDRAG (HDN_FIRST-11)
#endif
#ifdef UNICODE
#define HDN_ITEMCHANGING HDN_ITEMCHANGINGW
#define HDN_ITEMCHANGED HDN_ITEMCHANGEDW
#define HDN_ITEMCLICK HDN_ITEMCLICKW
#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKW
#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKW
#define HDN_BEGINTRACK HDN_BEGINTRACKW
#define HDN_ENDTRACK HDN_ENDTRACKW
#define HDN_TRACK HDN_TRACKW
#if (_WIN32_IE >= 0x0300)
#define HDN_GETDISPINFO HDN_GETDISPINFOW
#endif
#else
#define HDN_ITEMCHANGING HDN_ITEMCHANGINGA
#define HDN_ITEMCHANGED HDN_ITEMCHANGEDA
#define HDN_ITEMCLICK HDN_ITEMCLICKA
#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKA
#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKA
#define HDN_BEGINTRACK HDN_BEGINTRACKA
#define HDN_ENDTRACK HDN_ENDTRACKA
#define HDN_TRACK HDN_TRACKA
#if (_WIN32_IE >= 0x0300)
#define HDN_GETDISPINFO HDN_GETDISPINFOA
#endif
#endif
結局、HDN_*Wが来てました。今まではHDN_*Aを待っていたので捕まえられなかった
訳です。で、僕のプログラムではUNICODEが#defineされていなかったのが原因なわけ
ですが・・・これって僕のミスなんですか?
どうも腑に落ちない。
0888874
NGNG気にするなんて文字列についてのことなんだろうけど、BEGINTRACKでもBEGINDRAGでも
アイテムの情報(文字列を含む)をパラメータとしてもってくることに変わりはない。
ますます謎だ・・・。
0889デフォルトの名無しさん
NGNGhttp://support.microsoft.com/default.aspx?scid=kb;EN-US;q281155
0890デフォルトの名無しさん
NGNGオイラ、ウィンドウのプログラム組むときにMFC使わずにWin32だけで組んでいますが、
C++でMFC使わずに組んでる人ってどれくらいいるの?
0891デフォルトの名無しさん
NGNGはい。ATL/WTL は使ってるけど(w
0892デフォルトの名無しさん
NGNGそれにDLLヘルの問題がやだ、
STATICリンクにしても良いけどサイズが1M超えるのはかんなり鬱
っつーことで、Win32でC++で組んでるけど
結構クラスライブラリひととおり組むと勉強になる
0893デフォルトの名無しさん
NGNGDefFrameProcの2つ目の引数のクライアントウィンドウのインスタンスは
何を指定すればいいのでしょうか?
毎回getWindowで指定するのがいいのでしょうか?
0894デフォルトの名無しさん
NGNG0895デフォルトの名無しさん
NGNG勉強目的にはいいと思う。でも、それだけだな。
MFC はダメなライブラリだけど、その流儀に従えば
開発時間は短縮できるもの。
0896!=892
NGNGある程度大きなプログラムになると外面のコーディングは実装の
コーディング量を遥かに下回るから、どちらを使っても大差ない。
むしろ綺麗にかけるという点で自前ってのも悪くない。
勿論SDKで書くことに慣れてるのが前提。
逆に小さめのプログラムだとMFCはかなり効率を上げるが、
正直開発効率追求ならBCBやらDelphiを使えば良いわけで。
0897初心者
NGNGWin32API糞むずいよー( ´Д⊂ヽ)
誰か教えてよー
0898デフォルトの名無しさん
NGNG何処で詰まってるか言え。
0899初心者
NGNG例えば
int WINAPI WinMain()...
というのでWINAPIは何なのですか?
と教えて貰おうと思いましたが自分で調べないのはマズイので
ちょっとhttp://www.google.ne.jp/へ逝ってきます
0900デフォルトの名無しさん
NGNG__stdcall のことデス。
0901デフォルトの名無しさん
NGNGキーワードは「猫でも分かるプログラミング」で一発。
0902デフォルトの名無しさん
NGNGあまり細かいことを気にしたらいかん。
特に型周りは typedef の嵐だから、 "そういうもの" ということで
覚えてしまったほうがある意味楽だぞ。
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNG「呼び出し規約」でMSDN検索しる。
0905mige
NGNG0906zxcvbnm
NGNG0907zxcvbnm
NGNG今はWinbiffのひらめーるにあるようなリストビューが対象です
0908デフォルトの名無しさん
NGNG親ウィンドウのWM_SIZEでMoveWindowを使って、
コンボボックスの幅を動的に変えたいんですけどうまくいきません。
CB_SETDROPPEDWIDTHを使うのかなと思ったんですが、
これはリストの部分の幅を変更するだけですよね。
コンボボックスのサイズを変更する方法はないんでしょうか?
レス数が900を超えています。1000を超えると表示できなくなるよ。