Thứ Năm, 14 tháng 10, 2010

Dynamic Form submit value (JAVASCRIPT)

<form name="Submit" action="" method="post" enctype="multipart/form-data" id="form1">
function changeAction(val) {
document.getElementById("form1").setAttribute("action", val);
<a href="#" onclick="changeAction('test1.asp');">
<a href="#" onclick="changeAction('test2.asp');">
<a href="#" onclick="changeAction('test3.asp');">

Apple Developer Connection

ADC Home > Internet Technologies > Web Content >

Dynamic Forms with DHTML

Forms are key components of all Web-based applications. But important as they are, Web developers often present users with forms that are difficult to use. There are three common problems:

  • Forms can be too long. A seemingly endless list of questions is sure to make the user click the back button or jump to another site.
  • In many situations a specific user will need to fill out only some of the form elements. If you present needless questions to a user, you’ll add clutter to your page and encourage the user to go elsewhere.
  • Form entries often need to conform to certain formats and instructions. Adding this information to a Web page can make for a cluttered and unappealing screen.

Here’s an example of a form that’s sure to drive even the most intrepid user away. This article will show you how a little JavaScript can address each of these problems and make life a bit easier for the users of your site.

Choosing The Form You Want

A long form can be shortened in a number of ways. The Internal Revenue Service, for example, provides simple and complex versions of many of its forms; the 1040-A income tax form has a simpler version, the 1040-EZ, for people whose tax lives are less complicated.

If you have multiple versions of a form, the chief task becomes pointing people to the right form. Often, a simple set of links will do: “click here for the simple form, click here for the more complicated one.” Alternatively, a single page can show one of several forms that the visitor can choose between using radio buttons. This approach is especially nice for complicated pages and for users working over slow connections, since there’s no delay as a new page loads. Take a look at this example of a frame-like approach to providing multiple forms.

This approach uses Dynamic HTML (DHTML), which has several benefits over using IFRAMES to do the same thing. First, DHTML allows for more flexible formatting than IFRAMEs permit. You can apply background images, borders, fonts, and all the other features you’ve learned to expect from HTML and Cascading Style Sheets to DHTML objects. In contrast, IFRAMES have almost no configurable features. Second, if someone fills out one form, switches to another, then switches back, there’s a good chance that the browser will lose the information that was initially entered. This problem doesn’t exist in the DHTML solution. Third, with DHTML you can do tricky things like clipping and moving the form around the page. You could do these things by combining IFRAMES and DHTML, but you might as well just use DHTML in the first place.

The implementation in the choose_form.html page is pretty straightforward, especially if you’ve read the Internet Developer article Hide/Show Layer. Each form is placed in a DIV, and each DIV is associated with a radio button. When you select a radio button, you change the visibility of the associated DIV. View the source of the example to see the code. Here’s a brief breakdown.

First, each form lives in its own DIV. Here’s a somewhat simplified version of the DIV that holds the form:

<div id="ez" 
<form name="ez_form" method="POST"
<tr><td>Name:</td><td><input type="text"></td><tr>
<tr><td>Income:</td><td><input type="text"></td></tr>
<input type="submit">

There are a few things to note here. First, the DIV has an id (id=”ez”), which is used to identify which DIV we want to hide or show. Next, the DIV has stylesheet information. This positions the DIV (position:absolute;top:100px;left:5px) and hides it (visibility:hidden) when the page is first loaded.

The trick is to use the radio buttons to show the appropriate DIV. Here’s one of the radio buttons:

<input type="radio" name="form_type" value="ez"
onClick="switchDiv('ez');">Easy Form

Clicking on this button calls the switchDiv() function, which first checks to see if the browser can handle DHTML. If it can, two functions are called: hideAll(), which hides all the DIVs which contain forms, and thenchangeObjectVisibility(), which shows the requested DIV.

Here’s the switchDiv() function:

function switchDiv(div_id)
var style_sheet = getStyleObject(div_id);
if (style_sheet)
changeObjectVisibility(div_id, "visible");
alert("sorry, this only works in browsers that do Dynamic HTML");

First, switchDiv() tries to get the stylesheet of the DIV with the id of div_id. It uses a function calledgetStyleObject() which has been described in the article on hiding and showing layers. The getStyleObject() function takes the id of a DIV and returns the DIV’s style sheet. The function takes care of the cross-browser issues surrounding stylesheet access, so this script will work on Netscape 4.0+ and Internet Explorer 4.0+. If a visitor is using an earlier browser, the getStyleObject() function returns false. Here’s the function for your perusal:

function getStyleObject(objectId) {
// checkW3C DOM, then MSIE 4, then NN 4.
if(document.getElementById && document.getElementById(objectId)) {
return document.getElementById(objectId).style;
else if (document.all && document.all(objectId)) {
return document.all(objectId).style;
else if (document.layers && document.layers[objectId]) {
return document.layers[objectId];
} else {
return false;

Getting back to the switchDiv() function; if getStyleObject() successfully returns a stylesheet, the hideAll() andchangeObjectVisibility() functions are called.

The changeObjectVisibility() function was also described in the article on hiding and showing layers. It takes two parameters, the id of the DIV that should be changed, and the new visibility setting for that DIV (visible orhidden):

function changeObjectVisibility(objectId, newVisibility) {
// first get the object's stylesheet
var styleObject = getStyleObject(objectId);

// then if we find a stylesheet, set its visibility
// as requested
if (styleObject) {
styleObject.visibility = newVisibility;
return true;
} else {
return false;

First, the function gets access to the DIV’s stylesheet using getStyleObject(). If the stylesheet exists, the visibility of the DIV is changed according to the contents of the second parameter. If the second parameter is hidden, the DIV becomes hidden. If the parameter is visible, the DIV becomes visible.

The last function of note in the script is hideAll():

function hideAll()

This function simply calls changeObjectVisibility() three times, once to hide each DIV containing a form.

Putting this all together, clicking on a radio button calls switchDiv() which hides all the DIVs, using hideAll(), and then shows the appropriate DIV using changeObjectVisibility(). Clicking on another radio button then hides all the DIVs again and shows the DIV you want.

The functions getStyleObject(), and changeObjectVisibility() will be used in a couple of other examples in this article. Because they’ll be used so frequently, it’s a good idea to move them into a file which later scripts will include, like this:

<script src="utility.txt"></script>

It’s generally a good idea to put functions that are used in many scripts in a separate document. That way, if you want to change one of the functions, you only have to change one document, rather than going into every script that uses the function and changing it there.

Forming Wizards

You’ve just seen that presenting shorter forms can make life easier for people who don’t need to answer every question. But what about the people who do have to answer every item in a long list of questions? You can make their lives more pleasant as well.

One way to make a long list of questions more palatable is to break the form into several pages, like the wizards that are common in software applications. This limits the number of questions your visitors see at any given time, reducing the chance that they’ll run in fear. Also, once someone’s gone through a page or two of questions, they’re more likely to fill the whole thing out.

Many sites break long forms into small pieces submit each portion to a CGI script running on the web server. Most e-commerce sites break the ordering form into at least three forms: one for verifying the purchase, one for collecting shipping information, and one for billing information. When the first form is submitted, the information is sent to the web server and a program on that server saves the information and presents the second form.

This method has the advantage of saving information incrementally. If, for instance, you’re doing a survey, it means that even if a visitor stops filling out the survey half-way through, you still have some information. The down side of this method is that each part of the form needs its own trip to the server and back. If the connection is slow, that might mean losing your visitor due to lag time. This method also assumes that you have access to a scripting engine on the web server and that you know how to write server-side scripts.

Another, less frequently used solution, is to present the different parts of the form using DHTML. Put each of the sub-forms in its own DIV. Start off showing the sub-form in the first DIV, and then, when the visitor finishes filling out that portion, use JavaScript to hide the first DIV and show the second one. This breaks the form up into smaller chunks, saves the time taken up by multiple trips to the server, and doesn’t require access to server-side scripts. Take a look at the DHTML wizard to see an example of this in action. Then look at the source of the wizardto see what’s involved.

The Workings of the Wizard

There are a few interesting aspects to the wizard code. First, let’s look at a slightly shortened version of the second DIV:

<div id="part2" style="position:absolute;top:150px;left:50px;visibility:hidden;">
<form name="pet_info">
<tr><td>Your pet's name:</td>
<td><input name="petname" type="text"></td></tr>


<input type="button" value="prev"
onClick="switchDiv('part2', 'part1');">

<input type="button" value="next"
onClick="switchIfDone(this.form, 'part2', 'part3');">

There are a few things to note here. As before, the DIV has an id, which allows JavaScript to hide and show the DIV on command. The DIV also has stylesheet information which positions the DIV and hides it when the page is first loaded.

Inside the DIV sits a form with a series of questions. Note that the form has a name, as does each question. The script will be using these later to collect the data from the various sub-parts of the form.

In addition to the questions, there are two buttons at the end of the form. The first button allows the visitor to go back a page if she wants to change an answer. It calls the switchDiv() function and passes it two parameters: theid of the DIV that holds the part of the form the visitor is currently viewing and the id of DIV containing the part that should be visited next. The second button allows the visitor to move to the next part of the form once the part currently viewed has been completely filled out. It calls the switchIfDone() function which takes three parameters: the name attribute of the form, the id of currently visible DIV, and the id of the DIV that should be shown next.

The two functions which do most of the work are switchDiv() and switchIfDone(). The first of these is pretty straightforward:

function switchDiv(this_div, next_div)
if (getStyleObject(this_div) && getStyleObject(next_div)) {
changeObjectVisibility(this_div, "hidden");
changeObjectVisibility(next_div, "visible");

This function is similar to the changeDiv() function seen in the previous example. It uses the getStyleObject()function to make sure that the browser can handle DHTML. If so, it calls the changeObjectVisibility() function to hide the DIV that’s currently visible and show the DIV that should be seen next.

The switchIfDone() function determines whether or not the form has been completely filled out. If the form has been completed and the user is viewing the final portion of the form, all the information from all of the forms should be sent to the server. If the user is not viewing the final portion of the wizard, then the switchDiv() function will move to the next portion of the form.

The switchIfDone() function is called when a visitor hits the next button on the form, like so:

<input type="button" value="next" 
onClick="switchIfDone(this.form, 'part2', 'part3');">

The first parameter is a pointer to the form which contains the button. The function will check to see if this form has been properly filled out. If it has, the function will hide part2 and show part3.

Here’s the code to figure out if the form has been completed:

  var complete = true;
for (var loop=0; loop < the_form.elements.length; loop++)
if (the_form.elements[loop].value == "")
complete = false;

This loops through all the elements of the form and makes sure none of them are blanks. If a blank is found, the variable complete gets set to false.

Once the loop has executed, this code runs:

  if ((complete == true) && (next_div == "finished")) 

This calls submitTheInfo() if the form is completely filled out, and the next_div parameter has been set to finished. In order for this to work correctly, the next button in the DIV containing the last part of the wizard should look like this:

<input type="button" value="next" 
onClick="switchIfDone(this.form, 'part3', 'finished');">

If ‘finished’ is not the third parameter, this else-if portion will execute.

else if (complete == true) 
switchDiv(this_div, next_div);

If the form is complete, switchDiv() is called, showing the visitor the next part of the wizard. If this else-if fails, the form must not have been completed, and the final else runs:

else {
alert('please complete the form before moving on');

The last function in the script is the one that actually submits the information to the CGI script, or does whatever else you want to do with the information your visitor has provided:

function submitTheInfo()
var submission_string="";
for (var form_loop=0; form_loop<document.forms.length; form_loop++)
for (var elems=0; elems<document.forms[form_loop].length;elems++)
if (document.forms[form_loop].elements[elems].name != "")
submission_string += document.forms[form_loop].name + "_" +
document.forms[form_loop].elements[elems].name + "=" +
document.forms[form_loop].elements[elems].value + "\n";
document.hiddenform.the_text.value = submission_string;

// the next two lines are written for debugging -
// to put the script into action
// comment out the changeObjectVisibility() line
// and uncomment the document.hidden.form.submit() line

// document.hiddenform.submit();


This function loops through all the forms on the page and all the elements of each form, constructing a string containing all the information that has been provided. It then sticks this string in a textarea in a hidden form, and then submits the form. The DIV containing the hidden form looks like this:

&div id="hiddenstuff" style="position:absolute;top:300;left:5;visibility:hidden;">
<form name="hiddenform" method="POST" action="my_cgi_script">
<textarea name = "the_text" cols=40 rows=20>

Notice that the form has a method and an action. This tells the browser which script should be run when the form is submitted. The line

  document.hiddenform.the_text.value = submission_string;

sticks the string holding the values of the form into the textarea, and the line:


submits the form to the CGI script listed in the action attribute of the form.

Just like the previous example, the heart of the wizard involves hiding and showing DIVs based on the actions of the visitor. The wizard is slightly more complicated because it must collect information from several forms before submitting the information to the CGI script, but other than that it’s the same idea.

Too Much Information

Sometimes the answer to one question can make an entire set of sub-questions irrelevant. If someone filling out your apartment rental form says he or she doesn’t have a pet, you shouldn’t ask for pet-specific information. You could have two forms, one for pet owners, and another for the petless folks, but that means you have to maintain multiple forms which are all pretty similar to each other. Another solution is to use DHTML to make a set of questions appear or vanish based on the answer to another question. Take a look at the rental form for an example of how this might look.

This script works by modifying the display property of a stylesheet. If the display property of a stylesheet is set tonone, the DIV containing that stylesheet doesn’t take up any space on the screen (and is therefore invisible). If thedisplay property is set to block, the DIV will appear on the page. When the display property changes from none toblock, all the elements below the DIV will shift down to make room for the DIV’s contents. When the display property goes from block to none, the DIV will vanish and everything below it will shift up. Notice that this is quite different than the visibility property. When you make a hidden DIV visible, you won’t affect the positioning of anything else on the screen. And if the DIV is positioned over other elements of the page, it will appear on top of them.

Take a look at the source of the rental form to see what’s going on. The JavaScript is triggered when a visitor clicks on one of the radio buttons saying he or she has a pet. Each of those buttons looks something like this:

<input type="radio" name="pet" 
onClick="hideAll(); changeDiv('cat_questions','block');">cat

If the visitor owns a cat, the function hideAll() is called to hide any pet-specific questions that might be showing, and then calls changeDiv() with cat_questions and block as parameters. A bit lower on the page I have a DIV with an id of cat_questions. Here’s an abbreviated version of the DIV:

<div id="cat_questions" style="margin-left:30px;display:none">
Does your cat have fleas?
<input type="radio" name="fleas" value="yes">yes
<input type="radio" name="fleas" value="no">no

Notice the display:none property in the stylesheet. This tells the browser not to display the contents of this DIV. The changeDiv() function is similar to changeObjectVisibility():

function changeDiv(the_div,the_change)
var the_style = getStyleObject(the_div);
if (the_style != false)
the_style.display = the_change;

First getStyleObject() is called to get the stylesheet of the DIV we want to appear. If the stylesheet exists, itsdisplay property is changed, causing the DIV to appear on the page if the_change is block, or removing it ifthe_change is none. The getStyleObject() function used here is slightly different from the one we’ve been using. Unfortunately, the display property cannot be changed with JavaScript in Netscape 4, so this version ofgetStyleObject() returns false if the person is using Netscape 4.

The hideAll() function calls changeDiv() on each of the DIVs containing pet-specific questions.

function hideAll()

And that’s it — another variation on the theme of using JavaScript to change stylesheet properties of DIVs containing form elements. The main difference between this example and the previous ones is that this example tweaks the stylesheet’s display property, rather than its visibility property.

Good Form

You can also make forms easier to fill out by helping people enter their information in the correct format. Often forms are cluttered with instructions about how to format dates, how to enter credit card numbers, etc. Theformatting assistant page shows how you can help your users without cluttering the form up with instructions.

There are a few things happening in this example. First, clicking on a text box causes a formatting widget to pop up, indicating how an element should be filled out. As you can probably guess, this is done by sticking the widget inside a DIV and changing the DIV’s visibility. In addition, the script prevents the visitors from typing directly into the text fields — they have to use the widget. This ensures that the formating will be correct. Finally, the script takes the information out of the widget and sticks it in the text field.

Let’s first look at one of the main text boxes, the one where a visitor tries to enter a name:

Name: <input type="text"  name="the_name" 
onFocus= "hideAll();

This input field has an onFocus event handler. When someone clicks into the text box, that triggers a focus event, and runs the JavaScript attached to that event. In this case the hideAll() function is called, hiding whatever widgets are visible, and then the showAndFocus() function is called to show the appropriate widget.

The hideAll() function should look familiar:

function hideAll()

It calls the changeObjectVisibility() function that we’ve used in the other examples to set the visibility of the indicated DIVs to hidden.

The showAndFocus() function shows the correct widget and moves the cursor from where the user clicked to a form element in the widget. It takes the two parameters: the id of a DIV and a form field to which the cursor should be moved to. For this example, it’s passed the DIV id nameDiv which is the DIV containing the name widget. The second parameter, document.name_form.first_name, is the text field in the widget where the cursor will be focused. Here’s the showAndFocus() function:

function showAndFocus(div_id, field_to_focus)
var the_div = getStyleObject(div_id);
if (the_div != false)
changeObjectVisibility(div_id, "visible");

First, the function makes sure it can access the stylesheet of the DIV, using our old friend getStyleObject(). If it can get the stylesheet, it calls another old friend changeObjectVisibility() to make that DIV visible. Then it calls thefocus() method of the form element so that the cursor moves into the widget. Any time someone clicks on the main name field, the widget pops up and grabs the cursor. That’s how we can be sure that whatever’s in the main name field is correctly formatted. The only way to get anything in there is via the name widget.

The name widget looks like this:

<div id="nameDiv" style="position:absolute;top:50px;left:100px;
<form name="name_form">
First name: <input type="text" name="first_name"><br>
Last Name: <input type="text" name="last_name"><br>
<input type="button" value="DONE"

It’s a DIV with a form inside it, similar to what I used earlier. The last form element is the DONE button, which callsfillInName() when it’s clicked. The fillInName() function takes the information that’s been entered into the widget, sticks it in the main name field, and then hides the widget:

function fillInName(first_name, last_name)
document.main_form.the_name.value =
first_name + " " + last_name;


The widget for the date information works similarly. Take a look at the form assistant source code to see the whole script.


In this article I demonstrated four different ways to use DHTML to make forms easier to fill out. Letting people choose which form they need ensures that the forms people see are no more complicated than they need to be.

The interesting thing about all these applications is that even though they look different, the implementations are very similar. In fact, several functions were reused in all the examples. Good functions are like legos, you can use the good ones in lots of different applications. Take the functions you’ve seen here and try to reuse them in your own applications. You’ll be sure to formulate something formidable in no time.

Get information on Apple products.
Visit the Apple Store online or at retail locations.

Copyright © 2010 Apple Inc.
All rights reserved. | Terms of use | Privacy Notice

Thứ Ba, 12 tháng 10, 2010

Scripting Thay đổi tiêu đề trang khi Printing

// This example shows a page that modifies its title before printing
// and then resets it to its original value after printing.
var originalTitle;

<script for=window event=onbeforeprint>
originalTitle = document.title;
document.title = document.title + " - by Captain"

<script for=window event=onafterprint>
document.title = originalTitle;

Thứ Hai, 11 tháng 10, 2010

Chuyển DB thành Table PHP

Creates table from all db info:
$qry = "SELECT * FROM exp_member_data";
$res = mysql_query($mem_qry);
function mysql_fetch_all($res) {
   while($row=mysql_fetch_array($res)) {
$return[] = $row;
   return $return;
function create_table($dataArr) {
    echo "<tr>";
    for($j = 0; $j < count($dataArr); $j++) {
        echo "<td>".$dataArr[$j]."</td>";
    echo "</tr>";
$all = mysql_fetch_all($res);
echo "<table class='data_table'>";
for($i = 0; $i < count($all); $i++) {
echo "</table>";

Thứ Năm, 7 tháng 10, 2010

9 dịch vụ DNS miễn phí đáng dùng thử

Theo trang Avinashtech, các dịch vụ DNS này giúp người dùng cải thiện tốc độ truy cập mạng Internet nhanh chóng và tăng tính an toàn, hạn chế các mối nguy hiểm từ thế giới ảo.

OpenDNS ( là một trong những dịch vụ DNS tốt nhất và được cộng đồng mạng sử dụng nhiều nhất. OpenDNS giúp người dùng lướt web với tốc độ nhanh, an toàn. Nếu đăng ký một tài khoản tại trang chủ thì người dùng có thể tùy chỉnh một số thiết lập nâng cao như lọc địa chỉ web, chặn web đen…

Norton DNS ( là dịch vụ miễn phí của hãng bảo mật Symantec với các sản phẩm nổi tiếng như Norton Antivirus, Norton Internet Security. Dịch vụ giúp người dùng lướt web an toàn hơn, hạn chế các mối nguy hại như malware hay các website lừa đảo.

Dịch vụ ClearCloud ( giúp ngăn chặn các website lừa đảo, malware, trojan trước khi nó có thể gây nguy hiểm cho máy tính của người dùng.

Còn Google Public DNS ( là dịch vụ miễn phí của Google. Bạn có thể tìm hiểu kỹ hơn tại đây.

Comodo Secure DNS ( là dịch vụ của hãng Comodo giúp người dùng lướt web nhanh hơn, thông minh hơn và an toàn hơn.

DNS Advantage ( bao gồm một mạng lưới 15 nút mạng trên 15 quốc gia, trải dài trên 5 châu lục khác nhau giúp cho việc cập nhật, trao đổi dữ liệu giữa các nút mạng được diễn ra nhanh chóng, giúp người dùng online an toàn và nhanh chóng.

Scrubit ( giúp ngăn chặn các website khiêu dâm, lừa đảo và nhiều trang web có khả năng gây hại cho máy tính. Nếu người dùng muốn tùy chỉnh website nào mặc định sẽ bị khóa thì hãy đăng ký một tài khoản tại trang chủ của Scrubit.

Dịch vụ FoolDNS ( có thể ngăn chặn quảng cáo đến 90%, xóa cookie theo dõi và lịch sử truy cập của người dùng chỉ với một cú click chuột.

Một số dịch vụ DNS có tính năng thông minh, tự sửa lỗi khi người dùng gõ sai địa chỉ web hoặc dẫn người dùng tới một website khác. Nếu không thích tính năng đó thì DNS Resolvers sẽ giữ nguyên những gì người dùng nhập vào và chỉ thực hiện đúng những gì người dùng đang làm.

Tốc độ truy cập Internet phụ thuộc vào khoảng cách giữa máy chủ phân giải DNS và máy tính của bạn. Vì vậy để tìm ra được một DNS server nhanh, hãy sử dụng công cụ NameBench

Thứ Tư, 6 tháng 10, 2010

Tổng hợp những phần mềm Microsoft Original từ MSDN [Windows, Office, Visual Studio]

Thứ nhất, MSDN là những người dùng cao cấp của Microsoft. Họ phải trả phí không ít mỗi năm để duy trì quyền lợi cao cấp đó. Bù lại, họ được hưởng những thứ sau:
-Được cung cấp những sản phẩm mới nhất, tốt nhất của MS (như các bản Win được cập nhật thường xuyên, các sản phẩm mới chưa đâu có,..). Bình thường bạn phải tải bản Win XP SP2 rồi tải file SP3 để cập nhật thì họ có trực tiếp đĩa cài ra bản SP3 luôn. Và dùng bản đó thì nhanh hơn bản nâng cấp nhiều (mình và hàng nghìn người đã kiểm chứng).
-Họ có một trang web riêng để tải các CD, DVD phần mềm của MS cũng như nhiều tiện ích khác,...
Thứ hai, rất may là có vài người trong số họ hảo tâm chia sẻ những thứ hàng hiệu đó. Nhưng làm sao biết nó là hàng hiệu? Rất đơn giản như sau:
-Mỗi CD đều có một mã Hash, là con số đặc trưng cho một tập tin. Nếu con số đó bị thay đổi tức tập tin đó đã bị thay đổi (không tính đổi tên file).
-Tuyệt hơn, trên trang của MSDN có cung cấp mã Hash để kiểm tra tính nguyên bản của tập tin đó.
Mã hash giống như vân tay, là thứ duy nhất để xác minh một file nào đó. Nếu file đó có bất cứ thay đổi nào (trừ việc đổi tên file) thì mã Hash sẽ bị thay đổi.

Để kiểm tra mã Hash thì dùng phần mêm HashCalc


Để xem thêm mã Hash của các sản phẩm MSDN thì vào trang:

Đăng nhập bằng tải khoản Hotmail.

Chú ý: Không có mã Hash thì đừng tin bất cứ quảng cáo "Original" nào nhé!
Ai tải xong thì kiểm tra mã Hash (của file .iso) rồi up ảnh xác nhận lên cho mọi người nhé!
Nói dài dòng như vậy thôi, giờ mình sẽ post dần các sản phẩm hàng hiệu của MSDN cho các bạn nhé!

Những sản phẩm mình sẽ up bao gồm:

Các bản Windows
Các bản Oficce
Visual Studio

Nếu thấy thú vị, hãy chia sẻ với bạn bè theo link rút gọn sau:


****** ******

Chú ý: Do topic được hoàn thiện dần dần nên nhiều ý kiến về mã hash ở các post sau đã lỗi thời, không còn giá trị tham khảo. Giờ topic đã hoàn thiện và tất cả các link tải ở Page 1 đều là bản gốc, chuẩn mã hash!


Crack chứng nhận Genuine (giúp update online, cài WMP, MSE,...): Crack Cho Windows 7 rất tốt (mình đã test): Nếu bạn update bản vá KB971033 của Win 7 thì dùng cái này để remove thông báo kiểm tra bản quyền: Active Vista trên máy không có chứng nhận SLIC: hoặc: XP thì chỉ cần cài bản VL rồi crack Genuine là update thoải mái! Còn đây là active cho mọi bản Win XP, tải về rồi chạy file AntiWPA3.cmd để crack, sau đó chạy tiếp file WGA Fixer.exe để active Genuine: Tất cả các crack này đều chạy ngon, không có virus và được hàng trăm người kiểm chứng!

6 Công cụ hỗ trợ WIFI hữu dụng cho Windows

Chúng ta đang sống trong một thế giới di động, nếu bạn có một máy tính laptop hỗ trợ kết nối Wi-Fi thì bạn có thể dễ dàng truy cập internet mọi lúc mọi nơi, chỉ cần nơi đó có hỗ trợ sóng Wi-Fi. Tuy nhiên, có một vấn đề mà người dùng phải đối mặt, đó chính là công cụ hỗ trợ Wi-Fi của Windows chưa hoàn hảo, nó chỉ cho phép bạn tìm kiếm và kết nối với sóng Wi-Fi trong phạm vi nhận biết của nó. Ngược lại, nếu bạn muốn nhận được thêm nhiều thông tin chi tiết về mỗi mạng Wi-Fi trong phạm vi kết nối, khắc phục sự cố kết nối, biến laptop của bạn thành một điểm phát Wi-Fi hoặc giữ an toàn cho máy tính tại các điểm truy cập Wi-Fi công cộng… thì bạn cần phải cài đặt thêm các tiện ích hữu dụng sau đây.

1/ MetaGeek's InSSIDer

MetaGeek của inSSIDer là một công cụ tuyệt vời cho việc tìm kiếm các mạng Wi-Fi trong phạm vi kết nối của máy tính và thu thập rất nhiều thông tin về các mạng Wi-Fi này. Nó cũng hữu ích cho việc khắc phục sự cố các vấn đề với mạng Wi-Fi. Đây là một tiện ích hoàn toàn miễn phí, tương thích với Windows XP, Vista và Windows 7 (32 hoặc 64-bit), tải về tại
Khi tìm thấy được các mạng Wi-Fi, InSSIDer sẽ hiển thị cho bạn thấy địa chỉ MAC của router, tên sản xuất router (nếu có), định danh dịch vụ cài đặt (SSID) hoặc tên công cộng của mạng, chuẩn bảo mật đang sử dụng, tốc độ của mạng và nhiều hơn nữa. Ngoài ra, nó sẽ hiển thị cường độ tín hiệu hiện tại của mạng, cũng như cường độ tín hiệu của nó theo thời gian.
Làm thế nào để khắc phục sự cố mạng không dây với InSSIDer ? Nếu bạn thấy rằng mạng Wi-Fi của bạn sử dụng cùng một kênh với các mạng gần đó vốn có các tín hiệu mạnh mẽ hơn thì bạn sẽ biết rằng bạn nên thay đổi kênh và tần số phát cho router để tránh xung đột và đảm bảo tốc độ kết nối luôn ở mức cao nhất. Hầu hết các router đều có các tùy chọn cài đặt cho phép bạn làm điều này.

Bạn cũng có thể sử dụng phần mềm InSSIDer để phát hiện ra các "vùng chết", nơi mà sóng Wi-Fi yếu nhất hay thậm chí không có sóng bằng cách vừa ôm laptop vừa đi bộ xung quanh nhà hoặc văn phòng của bạn.
2/ Xirrus Wi-Fi Inspector

Đây là một chương trình tuyệt vời giúp bạn có thể xem nhiều thông tin có liên quan đến mạng Wi-Fi, chẳng hạn như làm thế nào để biết các điểm phát sóng Wi-Fi đang ở gần hay ở xa. Xirrus Wi-Fi Inspector sẽ hiển thị các điểm truy cập Wi-Fi trong phạm vi mà máy tính thu nhận được theo kiểu màn hình giống như một chiếc radar. Một cửa sổ riêng biệt cung cấp thông tin chi tiết về mỗi điểm truy cập mà nó tìm thấy, bao gồm cả cường độ tín hiệu, các chuẩn kết nối (ví dụ 802.11n), nhà cung sản xuất router, mạng Wi-Fi thuộc kiểu Access Point (điểm truy cập) hay Hoc (thu sóng Wi-Fi rồi phát lại)
Trong một cửa sổ bên cạnh radar, Xirrus Wi-Fi Inspector  cung cấp cho bạn các thông tin chi tiết về mạng mà bạn đang kết nối, bao gồm địa chỉ IP nội bộ, địa chỉ IP mở rộng, các thông tin về DNS và gateway… Xirrus Wi-Fi Inspector là tiện ích miễn phí, tương thích với Windows XP SP2/SP3 và Windows 7/Vista, tải về tại

So với tiện ích MetaGeek's InSSIDer thì Xirrus Wi-Fi Inspector có giao diện đơn giản hơn, các chức năng được trình bày gọn gàng giúp người dùng nhanh chóng xem thông tin về tất cả các điểm phát sóng trong nháy mắt. Đồng thời nó còn hiển thị khoảng cách vật lý giữa bạn và điểm phát sóng trên màn hình radar. Tuy nhiên, nếu bạn muốn biết các thông tin chi tiết, bao gồm cả những cường độ tín hiệu của các mạng không dây gần đó thì tiện ích inSSIDer sẽ là một lựa chọn tốt hơn.
3/ Connectify

Mặc dù bản thân Windows 7 cũng có tích hợp chức năng Set up a wireless ad hoc network để giúp bạn dễ dàng biến máy tính có card thu phát sóng wriless thành một trạm phát sóng nhằm chia sẻ kết nối Wi-Fi cho các thiết bị khác.

Tuy nhiên, để đơn giản và tiện lợi hơn, bạn có thể sử dụng tiện ích Connectify. Tiện ích này sẽ giúp bạn biến máy tính thành một trạm phát sóng Wi-Fi chỉ với vài cái bấm chuột. Connectify là tiện ích miễn phí, chỉ hoạt động trên Windows 7, bạn có thể tải về tại

Sau khi tải về và cài đặt thành công, Connectify sẽ tự khởi động và tạo ra một biểu tượng trong system tray, bạn chỉ cần bấm chuột phải vào biểu tượng này rồi chọn Show Connectify để làm xuất hiện giao diện làm việc của Connectify. Từ giao diện chính của chương trình, bạn hãy tiến hành tạo ra một wifi hotspot bằng cách nhập vào các thông tin sau :

-    Wifi Name : đặt tên cho wifi hotspot, tên này sẽ xuất hiện khi các thiết bị kết nối dò tìm ra sóng wifi của hotspot.
-    Password : đặt password để bảo vệ wifi hotspot và hạn chế các truy cập không mong muốn từ các thiết bị lạ. Password tối thiểu là 8 ký tự.
-    Internet : chọn nguồn internet mà laptop làm wifi hotspot đang sử dụng, trong trường hợp này là Local Area Connection.
-    Sau khi đã nhập xong các thông tin, bạn nhấn chuột vào nút Start Hotspot để bắt đầu biến chiếc laptop thành một wifi hotspot. Để ngưng sử dụng Connectify, bạn chỉ cần nhấn chuột vào nút Stop Hotspot để tắt wifi hotspot.
4/ WeFi

Các công cụ như inSSIDer hay Xirrus Wi-Fi Inspector sẽ là những công cụ tuyệt vời cho việc tìm kiếm các điểm phát sóng trong phạm vi mà máy tính có thể nhận ra. Tuy nhiên, nếu bạn muốn tìm các điểm phát sóng tại các địa điểm khác – ví dụ như trong khu phố hay trong thành phố nơi bạn sinh sống chẳng hạn, lúc này, tiện ích WeFi sẽ là một sự lựa chọn đáng quan tâm. WeFi có phiên bản miễn phí với các tính năng cơ bản, tương thích với Windows XP/Vista/7 và có cả phiên bản dành cho điện thoại di động sử dụng các hệ điều hành Symbian, Windows Mobile và Android, bạn có thể tải WeFi về từ địa chỉ

Không giống như các công cụ dò tìm sóng Wi-Fi khác, WeFi sẽ sử dụng kết nối Wi-Fi của bạn để tìm vị trí hiện tại của bạn và cho bạn thấy những điểm phát sóng gần đó thông qua kết nối internet. Với chức năng Wi-Fi Maps của WeFi, bạn có thể dễ dàng tìm ra các điểm phát sóng dưới dạng bản đồ của Google bằng cách gõ nội dung cần tìm vào ô tìm kiếm rồi nhấn nút GO. Tuy nhiên, theo thử nghiệm của tác giả thì nó hoạt động không chính xác.

5/ Hotspot Shield

Khi bạn kết nối với Internet thông qua một điểm phát sóng công cộng, bạn sẽ có nguy cơ bị đánh cắp các dữ liệu trên máy tính. Chính vì vậy, để an toàn hơn, bạn có thể sử dụng tiện ích Hotspot Shield, tiện ích này sẽ giúp máy tính của bạn an toàn bằng cách tạo ra một kết nối VPN và mã hóa tất cả các thông tin trên máy tính. Hotspot Shield là tiện ích miễn phí, hỗ trợ giao diện tiếng Việt, tải về tại

Khi bạn kết nối với một điểm phát sóng, bạn chỉ cần chạy Hotspot Shield, và nó sẽ bắt đầu bảo vệ bạn bằng cách sử dụng các giao thức Secure HTTP (HTTPS). Nó sẽ khởi động một thẻ trong trình duyệt web để cho bạn thấy rằng bạn đang kết nối; để ngắt kết nối, nhấp vào nút Disconnect. Để kết nối một lần nữa, nhấn vào nút Connect.
Bạn sẽ có một vài tùy chọn trong lần đầu tiên cài đặt Hotspot Shield. Nếu bạn không muốn thanh công cụ của nó được cài đặt trong trình duyệt web, hãy loại bỏ dấu chọn trong ô  "Include the Hotspot Shield Community Toolbar." Ngoài ra, hãy chắc chắn là bạn đã loại bỏ tùy chọn để thiết lập Hotspot Shield như là một công cụ tìm kiếm mặc định cho trình duyệt web, tùy chọn sửa lỗi "Không tìm thấy trang" và cho phép bạn nhận được các cảnh báo ngay lập tức từ phần mềm… các lựa chọn này có thể sẽ gây nhiều phiền phức cho bạn, chính vì vậy, bạn có thể loại bỏ tất cả chúng. Một lưu ý cuối cùng là khi bạn chạy phần mềm Hotspot Shield, nó sẽ mở một thẻ trong trình duyệt, sau đó nó sẽ tự chuyển sang một trang quảng cáo. Bạn có thể đóng thẻ này lại nếu bạn không muốn xem quảng cáo.
6/ Plug and Browse

Nếu bạn sử dụng máy tính laptop để kết nối với nhiều hơn một mạng không dây hoặc có dây, bạn có thể tốn nhiều thời gian để chuyển đổi các thiết lập mạng.

Ví dụ, tại nơi làm việc của bạn bạn bắt buộc phải dùng một địa chỉ IP tĩnh cùng với các thông số proxy của máy chủ để chia sẻ các tài nguyên trong mạng nội bộ. Tại nhà, bạn có thể sử dụng một địa chỉ IP động và thể sử dụng Windows Firewall nhưng không có các thông số proxy của máy chủ. Mỗi khi bạn chuyển đổi mạng vị trí làm việc, bạn buộc phải tinh chỉnh các thiết lập như máy in mặc định, ổ đĩa mạng ánh xạ, thông số proxy...v.v… với Plug and Browse bạn không cần phải vất vả như vậy nữa.

Nó cho phép bạn tạo hồ sơ cho tất cả các mạng mà bạn cần sử dụng, và sau đó khi bạn chuyển từ một mạng khác, bạn chỉ cần chọn hồ sơ của các mạng mới. Tất cả các thiết lập của bạn sẽ được nguyên vẹn. Plug and Browse là phần mềm shareware, có giá bán 39.99 USD, tương thích với Windows XP, Vista/7, tải về bản dùng thử 30 ngày tại

Hiren BootCD 11.0 cứu hộ, diệt virus,...

Đĩa CD Mega Rescue Kit CD 2011mới có trong tháng qua, đã  đáp ứng hầu như mọi nhu cầu cứu hộ, phục hồi dữ liệu, diệt virus, chẩn đoán bệnh máy tính, bao gồm thêm cả Hiren boot CD mới nhất 11.0  và kích thước chỉ có 766MB.

I) Những nét đặc sắc:

- Chẩn đoán và chỉnh sửa phần khởi động mọi hệ điều hành 

- Drivers SATA.

-  Phục hồi mọi dự liệu nào do lỡ xoà hay bi6 mất đi do vô ý 

-  bao gồm thêm chương trình diệt virus,malwares có khả năng cập nhật virus được (nếu chạy trong USB )

- Có được Windows7 Live BartPE dễ cập nhật cứu hộ dữ liệu ở bất cứ đâu: không như XP mini của Hiren sẽ không chạy tốt  trong nhiều laptop đời mới dùng SATA driver riêng như HP5p,7p. 

-  Khả năng kết nối mạng(nhưng không thể qua wireless được) .

-  Phục hồi mật mã  admin (tài khoả chính hay những người dùng khác). 

- Win7 Recovery Tools: công cụ phục hồi chữa lỗi sai và bảo trì Win 7

-  Phục hồi và quản lý file hình ảnh hệ thống  

-  Đo được nhiệt độ CPU và hệ thống.

-  Công cụ quản lý từ xa. 

-  Có thông tin toàn bộ hệ thống.

II) Công cụ trong đĩa CD:

-- Hiren's BootCD 11.0 + Windows 7 Live BartPE 

-  Bô công cụ chẩn đoán và phục hồi .

-  Phục hồi file hình ảnh hệ thống- Chỉnh sửa lại phần khởi động 

-  Malwarebytes Anti-Malware- SUPER AntiSpyWare

-  Quản lý máy tính ( Computer Management) 

-  Quản lý Files và thư mục.

-  Phù thủy nhằm tìm ra biện pháq gỉai quyết( Solution Wizard) 

-  Cấu hình TCP/IP

-  Gỡ bò Hotfix 

-  Công cụ đọc nhanh PDF

- NotePad để ghi chú nhanh khi cần thiết 

- MSN Messenger

- Disk Wipe - System Restore 

-  Chẩn đoàn bộ nhớ( Windows Memory Diagnosis)

- DOS tạm(  Command Prompt) 

- InfraRecorder Ghi đĩa hình ảnh dữ liệu sao chép toàn bộ copy đĩaCD\DVd)

- FSViewer Đọc file và chỉnh sửa ảnh 

- Everest: bất tiện do còn dùng chữ Á rập ở giao diện )

- Recover4all: phụcx hpồi dữ liệu lỡ xoá 

- Core Temp: đo nhiệt độ CPU, máy tính,

- 7-Zip File Manager: quản lý files thư mục y như Windows Exploer 

- TeamViewer.

- Drivers Installer: cài thêm driver.

III) Tải từ đâu:

a) Tải tử Mediafire:

b) hay Hotfile

IV) Sử dụng:

1)   Click nút phải chọn bung file đầu là  Mega.Rescue.Kit.CD.2011.part1.rar. Nó sẽ bung hết thành file rar duy nhất.

2)   Bung tiếp file rar này ta sẽ có 2 file ISO  Hiren 11.ISO và Mega rescue  disk CD 2011

3)   Ghi ra từng đĩa CD này tuỳ theo nhu cầu bạn cần dùng Hiren boot CD 11 hay Mega rescue disk CD 2011.

4)  Nếu bạn biêt cách  dùng Winsetup from USB, có thể dùng ngay 2 ISO này để chung trong một cây viết USB có  một menu chọn lựa riêng biệt

nhiều thứ nhờ file menu.lst của Grub DOS.

5)   Muốn dùng được đầy đủ chức năng của MiniXP (Hiren boot Cd 11), bạn phải bung file ISO ra nhiều thư mục rồi chép thư mục HBCD chính và

phụ vào USB. Dùng nguyên ISO Hiren tromg USB, Mini XP  sẽ bị bất hoạt nhiều thứ.

6)      Muốn tận dụng chức năng cập nhật virus bạn phải chạy đĩa  này trong USB chứ nếu ghi vào đĩa CD thì không được vì CD là read only.

7)       Đĩa Mega rescue kit CD 2011 có khá nhiều công cụ sáng giá để cứu hộ máy tính, diệt virus, phục hồi  chỉ  có một điều bất tiện duy nhất  là công 

cụ Everest Ultimate còn dùng chữ Á rập nên không hiểu và không dùng được.

Tạo hiệu ứng biến đổi hình ảnh độc đáo

(Dân trí) - Một đoạn video clip cho thấy sự thay đổi gương mặt của một ai đó theo thời gian thực sự là món quà có ý nghĩa cho người thân và bạn bè. FotoMorph là phần mềm miễn phí, cho phép bạn thực hiện điều này.

Biến đổi hình ảnh là hiệu ứng độc đáo, thường được áp dụng trong kỹ xảo điện ảnh. Theo đó, quá trình xử lý ảnh sẽ sử dụng kỹ thuật độc đáo để biến đổi từ hình ảnh này sang hình ảnh khác một cách sinh động.

Ví dụ, bạn có thể biến đổi từ gương mặt của người này sang gương mặt người khác, hay thậm chí biến từ gương mặt người sang gương mặt của một con báo…

Hình ảnh minh họa cho hiệu ứng biến đổi từ gương mặt này sang gương mặt khác.

FotoMorph là phần mềm miễn phí, cho phép bạn tạo hiệu biến đổi hình ảnh, để thay thế gương mặt của người này bằng gương mặt của người khác một cách độc đáo. Không những thế, phần mềm còn cho phép tạo hiệu ứng nháy mắt độc đáo cho bức ảnh tĩnh thông thường.

Download phần mềm tại đây.

Sau khi download, kích hoạt, nhấn nút ‘No-Question-Ask Installation’ để tiến hành cài đặt phần mềm.

Để bắt đầu tạo hiệu ứng cho hình ảnh, tại giao diện chính của phần mềm, chọn tab Project, rồi nhấn nút New Project từ menu bên trái, chọn 1 trong 4 tùy chọn hiện ra:

- Morph Sequence: hiệu ứng biến đổi hình ảnh. Với hiệu ứng này, bạn có thể tạo thay đổi từ gương mặt người này thành gương mặt người kia một cách độc đáo.

- Warp Sequence: tạo hiệu ứng trên một phần của hình ảnh. Chẳng hạn hiệu ứng phóng to vào một phần nào đó trên ảnh.

- Pan Sequence: tạo hiệu ứng nháy mắt độc đáo cho hình ảnh.

- Transitions Sequence: thay đổi từ hình ảnh này sang hình ảnh khác, tương tự như trên slide trình chiếu của Powerpoint.

Trong đó, hiệu ứng biến đổi hình ảnh (morph Sequence) là tính năng độc đáo và nổi bật hơn cả của phần mềm.

Tạo hiệu ứng biến đổi hình ảnh:

- Để bắt đầu, tại tab Project, nhấn nút New Project, chọn Morph Sequence.

- Tiếp theo, chọn tab Images. Đây là nơi cho phép bạn chọn hình ảnh gốc và hình ảnh đích muốn biến đổi thành. Để được kết quả tốt nhất, bạn nên chọn lựa 2 hình ảnh có góc nhìn tương đối giống nhau.

Lần lượt chọn mục Start Image rồi nhấn nút Open để mở hình ảnh cần sử dụng.

Lưu ý: Bạn nên chọn những hình ảnh có kích cỡ bằng nhau để đạt được chất lượng tốt nhất. Sử dụng phần mềm Photo Magician để thay đổi các hình ảnh về cùng 1 kích cỡ.

Tại tab này, phần mềm cũng cung cấp một vài công cụ để xử lý hình ảnh như xoay hình, thay đổi màu sắc, độ sáng, tạo hiệu ứng trên hình ảnh…

- Sau khi đã chọn được hình ảnh ưng ý, chuyên qua tab Control. Tại đây, bạn phải đánh dấu những điểm tương đồng để FotoMorph dựa vào đó tạo nên hiệu ứng biến đổi hình ảnh. Nên đánh dấu những điểm như đôi mắt, mũi, và miệng ở hình ảnh nguồn và đích để phần mềm nhận diện. Điểm đánh dấu sẽ được hiển thị đồng thời cả ở 2 hình ảnh. Càng nhiều điểm đánh dấu được sử dụng, quá trình biến đổi hình ảnh diễn ra càng mượt mà hơn.

Bạn nên sử dụng tối thiêu 20 điểm để đánh dấu.

Chọn Sequence Text để thêm nội dung văn bản muốn xuất hiện trên hình ảnh của quá trình hiệu ứng chuyển đổi. Nếu muốn kéo dài quá trình biến đổi hình ảnh, kéo dài thông số tại mục Duration ở menu bên trái.

Nhấn nút Play ở bên dưới để xem trước quá trình chuyển đổi xem đã hợp lý hay chưa.

- Khi đã hoàn tất các bước thiết lập, chuyển đến tab cuối cùng, Animation. Tại đây, nhấn nút Explort Animation để xuất ra kết quả. Bạn có thể lưu lại kết quả dưới dạng file ảnh động (.gif), file video, file flash (swf) và file html (tích hợp sẵn flash dành cho người không chuyên về lập trình).

Tốt nhất, bạn nên lưu kết quả lại dưới dạng file Video, và upload lên Youtube để chia sẻ với mọi người. Để làm điều này, nhấn nút Explort Animation, chọn AVI Movie từ hộp thoại hiện ra. Nhấn OK và nhấn tiếp OK ở hộp thoại sau đó để lưu kết quả.

Ngoài ra, bạn cũng có thể lưu lại dưới dạng ảnh động GIF để dễ dàng chia sẻ lên các website.

Tạo đoạn video biến đổi hình ảnh liên tục:

Với FotoMorph, bạn còn có thể tạo thành 1 đoạn video, trong đó có chứa những hình ảnh thay đổi theo thời gian để dần thấy được sự thay đổi của chân dung ai đó theo thời gian.

Để làm điều này, sau khi đã tạo hoàn tất 1 hiệu ứng biến đổi như đã hướng dẫn ở trên, bạn chưa nên lưu lại ngay kết quả của mình, mà quay trở lại tab Projects, chọn Add Sequence để tiếp tục tạo thêm 1 đoạn video hiệu ứng chuyển đổi hình ảnh mới, nằm ngay sau đoạn hiệu ứng mà bạn đã tạo trước đó.

Kết quả cuối cùng, bạn sẽ có được 1 đoạn video cho thấy sự biến đổi theo thời gian. Đây thực sự sẽ là một món quà đầy ý nghĩa dành tặng cho gia đình và người thân. Đặc biệt, nếu đang là học sinh, sinh viên, bạn có thể dành tặng cho lớp của mình một đoạn video clip với hiệu ứng biến đổi hình ảnh gương mặt của các thành viên trong lớp. Một món quà độc đáo.

Bạn có thể xem đoạn video minh họa ý tưởng độc đáo này ở dưới đây:

Lưu ý: Để sử dụng phần mềm được đơn giản hơn, bạn nên xem qua phần tạo hiệu ứng mẫu mà phần mềm cung cấp, bằng cách nhấn nút Sample Project tại tab Project. Tại đây, 4 hiệu ứng của phần mềm đã được dựng mẫu từ trước để người dùng có thể hiểu hơn về cách thức sử dụng.

Phạm Thế Quang Huy